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

时间:2013-02-09 19:40:08

标签: properties asp-classic pass-by-reference 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"的方式。任何人都可以看到这有什么问题吗?

提前致谢, 问候, 理查德

3 个答案:

答案 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"

不太优雅,但有效。