在经典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"
。有人能看出这是怎么回事吗?
不幸的是,这是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
您是否尝试过与关键字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");
祝你好运。
正如另一个答案正确指出的那样,您正面临语言本身的限制。
就我所见,实现您所追求的目标的唯一其他选择是向类本身添加这样的子程序:
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"
不那么优雅,但很实用。