我正在尝试编写一个VBScript,并且我正在使用诸如随机化和MsgBox之类的函数。我很好奇使用()和不使用它们有什么不同。例如:
Randomize -此行有效。
Randomize() -此行也适用。
MsgBox "Hello world!" -这是可行的。
MsgBox ("Hello world!") -这也是可行的。
该脚本将在装有不同版本的Windows (至少是Windows XP)的多台计算机上运行。我想知道在使用这些函数时是否会遇到任何兼容性/语法问题。
发布于 2012-11-29 17:17:07
一段可调用的代码(例程)可以是Sub (因副作用而调用)或函数(因其返回值而调用)或两者的混合。作为MsgBox的文档
在对话框中显示一条消息,等待用户单击某个按钮,并返回一个值,该值指示用户单击了哪个按钮。
MsgBox(提示、按钮、帮助文件、上下文)
表明,此例程属于第三种类型。
VBScript的语法规则很简单:
在调用(例程作为)函数时使用参数列表()
如果您想要向用户显示一条消息,并且需要知道用户的回复:
Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
' MyVar contains either 1 or 2, depending on which button is clicked.在调用(例程作为)子时,不要使用参数 ()
如果您想向用户显示一条消息,但对响应不感兴趣:
MsgBox "Hello World!", 65, "MsgBox Example"这种美丽的简单性被以下因素搞得一团糟:
将()用于参数列表和强制按值调用语义的设计缺陷
>> Sub S(n) : n = n + 1 : End Sub
>> n = 1
>> S n
>> WScript.Echo n
>> S (n)
>> WScript.Echo n
>>
2
2S (n)并不意味着“用n调用S”,而是“用n的值的副本调用S”。程序员看到了
>> s = "value"
>> MsgBox(s)当他们尝试的时候,“作品”将会带来惊喜:
>> MsgBox(s, 65, "MsgBox Example")
>>
Error Number: 1044
Error Description: Cannot use parentheses when calling a Sub编译器在Sub调用中对empty ()的宽大处理。可以调用“纯”子随机化(调用用于设置随机种子的副作用)
Randomize()尽管()既不能表示“给我你的返回值),也不能表示”通过值传递某些东西“。
Randomize n和
Randomize (n)允许Sub调用中的参数list ()的Call语句:
s= "value“调用MsgBox(s,65,"MsgBox Example")
这进一步鼓励程序员不假思索地使用()。
(基于What do you mean "cannot use parentheses?")
发布于 2012-11-29 16:51:10
据我所知,在VBScript中调用子例程和函数的规则如下:
在调用丢弃返回值的子例程或函数时,不要使用parenthesis
Call关键字调用子例程将参数括在括号中因为您可能不会使用Call关键字,所以您只需要学习这样一条规则:,如果您调用一个函数并想要赋值或使用返回值,则需要将参数括在括号中。否则,请不要使用括号。
下面是一些示例:
WScript.Echo 1, "two", 3.3 -调用subroutineWScript.Echo(1, "two", 3.3)语法errorCall WScript.Echo(1, "two", 3.3) -关键字调用需要parenthesisMsgBox "Error" -调用函数"like“subroutineresult = MsgBox("Continue?", 4) -调用返回值为usedWScript.Echo (1 + 2)*3, ("two"), (((3.3)))的函数-调用子例程,其中的参数是由包含括号的表达式计算的(请注意,如果在参数列表中用括号将变量括起来,它会将行为从按引用调用更改为按value)WScript.Echo(1)调用-显然这是这样的是一个使用括号的子例程调用,但实际上参数只是表达式(1),这往往会让那些习惯于在调用subroutinesRandomize()。Randomize是一个接受单个可选参数的子例程,但是即使该子例程没有任何参数,也可以使用一对空括号来调用它。对于空参数列表,VBScript解析器似乎有一个特殊的规则。然而,我的建议是避免这种特殊的构造,只调用任何子例程,而不使用parenthesis.我非常确定这些语法规则适用于不同版本的操作系统。
发布于 2012-11-30 01:22:16
您只是在函数中使用了一个参数,因此它在这两种情况下都工作得很好,如下所示:
MsgBox "Hello world!"
MsgBox ("Hello world!")但是当你使用多个参数时,在VBScript方法中,括号将抛出一个错误,没有括号将很好地工作,如下所示:
MsgBox "Hello world!", vbExclamation上面的代码会运行得很流畅,但是
MsgBox ("Hello world!", vbExclamation)将抛出错误。试试这个!!:-)
https://stackoverflow.com/questions/13620748
复制相似问题