参考函数定义中的函数名称

时间:2013-02-02 03:17:17

标签: recursion vbscript rvalue-reference

鉴于以下内容:

wscript.echo "fx(0)=" & fx(0)

Function fx( v1 )
   fx = 1 + 2
   Wscript.echo "fx=" & fx
End Function

两条“echo”行都打印值3。为什么函数内部的那个不会导致语法错误或递归循环?与以下示例相同的问题:

wscript.echo "fy()=" & fy()
wscript.echo "fy=" & fy

Function fy
   fy = 1 + 2
   Wscript.echo "fy=" & fy
End Function

所有回显线都打印3

当函数定义将其名称引用为RVALUE时,我找不到描述行为的文档。

TIA。

2 个答案:

答案 0 :(得分:2)

在VBScript函数中,函数的名称是本地范围的变量,旨在等效于函数的返回值。它与任何其他Dim var = ...没有什么不同。要将其视为一个函数,您需要使用调用语义。

基本上,您似乎习惯了具有一流功能的语言。 VBScript没有它们,所以没有歧义。

答案 1 :(得分:0)

除了Plynx之外,VBScript有点暧昧。这就是为什么你可以使用wscript.echo fy以及wscript.echo fy()来处理没有参数的函数。

但是,在使用functionname作为变量的函数内部,这不起作用。如果你这样做:

Function fy
   fy = 1 + 2
   Wscript.echo "fy=" & fy()
End Function

您将收到Out of stack space: 'fy'错误。 将functionname用作函数实际上可能很有用,因为现在可以在构建递归函数时将functionname用作变量或函数调用。

为了便于阅读,我建议在函数调用中使用括号。它将使您或您的同事更容易进行审阅或调试。