一段可调用的代码(例程)可以是 Sub(调用副作用/它的作用)或 Function(调用它的返回值)或两者的混合。作为 MsgBox 的文档
在对话框中显示一条消息,等待用户单击按钮,并返回一个值,指示用户单击了哪个按钮。
MsgBox(提示[, 按钮][, 标题][, 帮助文件, 上下文])
表明,这个程序是第三种。
VBScript 的语法规则很简单:
调用(routine as a)函数时使用参数list()
如果您想向用户显示消息并且需要知道用户的回复:
Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
' MyVar contains either 1 or 2, depending on which button is clicked.
调用 (routine as a) Sub 时不要使用参数列表 ()
如果您想向用户显示消息并且对响应不感兴趣:
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
2
S (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()
尽管 () 既不能表示“给我你的返回值”也不能表示“按值传递”。这里更严格一点会迫使 prgrammers 意识到
Randomize n
和
Randomize (n)
在 Sub 调用中允许参数 list() 的 Call 语句:
s = "value" 调用 MsgBox(s, 65, "MsgBox Example")
这进一步鼓励程序员不假思索地使用 ()。
(基于你的意思是“不能使用括号?”)