经典ASP-将属性作为byref传递



在经典ASP中,我有一个对象,称之为bob。然后,它有一个名为name的属性,带有letget方法。

我的功能如下:

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"

不那么优雅,但很实用。

相关内容

  • 没有找到相关文章

最新更新