在经典ASP中我有一个对象,称之为bob
。然后,它有一个名为name
的属性,使用let
和get
方法。
我的功能如下:
sub append(byref a, b)
a = a & b
end sub
这只是为了更快地将文本添加到变量中。我对prepend
也有同样的看法,只有a = b & a
。我知道说bob.name = bob.name & "andy"
会很简单,但我尝试使用上面的函数,但它们都不起作用。
我称之为append bob.name, "andy"
的方式。任何人都可以看到这有什么问题吗?
提前致谢, 问候, 理查德
答案 0 :(得分:2)
不幸的是,这是VBScript的一个功能。它在http://msdn.microsoft.com/en-us/library/ee478101(v=vs.84).aspx中的“类中的参数”下记录。另一种方法是使用一个函数。这是一个说明差异的例子。您可以使用“cscript filename.vbs。
从命令行运行此命令sub append (a, b)
a = a & b
end sub
function Appendix(a, b)
Appendix = a & b
end function
class ClsAA
dim m_b
dim m_a
end class
dim x(20)
a = "alpha"
b = "beta"
wscript.echo "variable works in both cases"
append a, b
wscript.echo "sub " & a
a = appendix(a, b)
wscript.echo "function " & a
x(10) = "delta"
wscript.echo "array works in both cases"
append x(10), b
wscript.echo "sub " & x(10)
x(10) = appendix( x(10), b)
wscript.echo "function " & x(10)
set objAA = new ClsAA
objAA.m_a = "gamma"
wscript.echo "Member only works in a function"
append objAA.m_a, b
wscript.echo "sub " & objAA.m_a
objAA.m_a = appendix(objAA.m_a, b)
wscript.echo "function " & objAA.m_a
答案 1 :(得分:1)
您是否尝试过使用关键字CALL
:
call append (bob.name, "andy")
经典ASP与ByRef和ByVal相关。默认情况下,它使用ByRef - 没有理由指定它。如果使用括号调用函数(没有调用),它将把变量作为ByVal传递。
或者,您可以通过以下方式完成相同的操作:
function append(byref a, b)
append = a & b
end sub
bob.name = append(bob.name, "andy");
祝你好运。
答案 2 :(得分:0)
正如this other answer正确陈述的那样,你面临语言本身的限制。
在我看到它的过程中,实现你所追求的唯一的另一个选择是在类本身中添加这样的子例程:
Public Sub Append(propName, strValue)
Dim curValue, newValue
curValue = Eval("Me." & propName)
newValue = curValue & strValue
Execute("Me." & propName & " = """ & Replace(newValue, """", """""") & """")
End Sub
然后使用它:
bob.Append "name", "andy"
不太优雅,但有效。