2

鉴于以下情况:

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

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

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

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

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

所有回声线打印3

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

TIA。

4

2 回答 2

2

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

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

于 2013-02-02T03:33:08.820 回答
0

除了 Plynx,VBScript 也有些模棱两可。这就是为什么你可以使用wscript.echo fy以及wscript.echo fy()用于没有参数的函数。

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

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

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

为了可读性,我建议在函数调用中使用括号。这将使您或您的同事更轻松地进行审查或调试。

于 2013-02-04T15:47:24.283 回答