use*_*387 28 vbscript function
我正在尝试编写VBScript,我正在使用Randomize和MsgBox等函数.我很好奇使用()和不使用它们有什么区别.例如:
Randomize - 这条线有效.
Randomize() - 这条线也有效.
MsgBox "Hello world!" - 这很有效.
MsgBox ("Hello world!") - 这也有效.
该脚本将在具有不同Windows版本(至少是Windows XP)的多台计算机上运行.我想知道在使用这些函数时是否会遇到任何兼容性/语法问题.
Ekk*_*ner 27
可调用的代码片段(例程)可以是Sub(调用副作用/它的作用)或Function(调用其返回值)或两者的混合.作为MsgBox的文档
在对话框中显示消息,等待用户单击按钮,然后返回一个值,指示用户单击了哪个按钮.
MsgBox(提示[,按钮] [,标题] [,帮助文件,上下文])
表明,这个例程是第三种.
VBScript的语法规则很简单:
在调用(例程为a)函数时使用参数列表()
如果要向用户显示消息并需要知道用户的响应:
Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
' MyVar contains either 1 or 2, depending on which button is clicked.
Run Code Online (Sandbox Code Playgroud)
在调用(例程为a)Sub时不要使用参数列表()
如果要向用户显示消息并且对响应不感兴趣:
MsgBox "Hello World!", 65, "MsgBox Example"
Run Code Online (Sandbox Code Playgroud)
这种美丽的简约被搞砸了:
using()用于参数列表和强制按值调用语义的设计缺陷
>> Sub S(n) : n = n + 1 : End Sub
>> n = 1
>> S n
>> WScript.Echo n
>> S (n)
>> WScript.Echo n
>>
2
2
Run Code Online (Sandbox Code Playgroud)
S(n)并不意味着"用n调用S",而是"用n的值的副本调用S".程序员看到了这一点
>> s = "value"
>> MsgBox(s)
Run Code Online (Sandbox Code Playgroud)
当他们尝试时,"作品"令人惊讶:
>> MsgBox(s, 65, "MsgBox Example")
>>
Error Number: 1044
Error Description: Cannot use parentheses when calling a Sub
Run Code Online (Sandbox Code Playgroud)
编译器对Sub调用中的empty()的宽容.可以调用'纯'子随机化(调用设置随机种子的副作用)
Randomize()
Run Code Online (Sandbox Code Playgroud)
虽然()既不能代表"给我你的回报价值",也不能"按价值传递东西".这里更严格一点会迫使程序员意识到差异
Randomize n
Run Code Online (Sandbox Code Playgroud)
和
Randomize (n)
Run Code Online (Sandbox Code Playgroud)
允许Sub调用中的参数list()的Call语句:
s ="value"调用MsgBox(s,65,"MsgBox示例")
这进一步鼓励程序员不假思索地使用().
(根据你的意思"不能使用括号?")
Mar*_*age 10
据我所知,这些是在VBScript中调用子例程和函数的规则:
Call关键字调用子例程时,括号中的参数括起来由于您可能不会使用该Call关键字,因此您只需要了解如果调用函数并想要分配或使用返回值的规则,则需要将参数括在括号中.否则,请勿使用括号.
这里有些例子:
WScript.Echo 1, "two", 3.3 - 调用子程序
WScript.Echo(1, "two", 3.3) - 语法错误
Call WScript.Echo(1, "two", 3.3)- 关键字Call需要括号
MsgBox "Error" - 调用一个"喜欢"子程序的函数
result = MsgBox("Continue?", 4) - 调用使用返回值的函数
WScript.Echo (1 + 2)*3, ("two"), (((3.3))) - 调用一个子程序,其中参数由涉及括号的表达式计算(请注意,如果在参数列表中用括号括起变量,它会改变从引用调用到按值调用的行为)
WScript.Echo(1)- 显然这是一个使用括号的子程序调用,但实际上这个参数只是表达式(1)而且往往会混淆那些用于其他编程语言的人,你必须在调用子程序时指定括号
我不确定如何解释你的例子Randomize().Randomize是一个接受单个可选参数的子例程,但即使子例程没有任何参数,也可以使用一对空括号来调用它.似乎VBScript解析器对空参数列表有一个特殊规则.但是,我的建议是避免使用这种特殊结构,只需调用任何子程序而不使用括号.
我很确定这些语法规则适用于不同版本的操作系统.