Vb6 是否可以在没有括号的情况下调用VB函数?
我正在查看VB6代码,我看到一个声明如下-Vb6 是否可以在没有括号的情况下调用VB函数?,vb6,Vb6,我正在查看VB6代码,我看到一个声明如下- Public Sub CheckXYZ(abc As Integer) If abc <> pqr Then SetVars abc 我是VB新手。在VB中,允许函数调用而不需要附加条件,这是常见的吗 带有参数的子调用不需要括号。只有返回结果的函数才需要此函数 Private Sub Testy1() Function1 "Testy2" ' does not require parenthesis
Public Sub CheckXYZ(abc As Integer)
If abc <> pqr Then SetVars abc
我是VB新手。在VB中,允许函数调用而不需要附加条件,这是常见的吗 带有参数的子调用不需要括号。只有返回结果的函数才需要此函数
Private Sub Testy1()
Function1 "Testy2" ' does not require parenthesis
Debug.Print Function1("Testy3") ' does require parenthesis
End Sub
Private Function Function1(str as String) as Boolean
Function1 = True
End Function
正如Ryan所指出的,括号只能在调用将返回值的函数时使用 我想补充的一个缺陷是,如果在调用Sub时确实无意中使用了parentese,VB6将通过值而不是引用来传递参数 当Sub接受多个参数时,这不是风险,因为这在VB6中是非法语法:
SomeFunc (arg1, arg2)
但请考虑这个例子:
Sub AddOne(ByRef i As Integer)
i = i + 1
End Sub
Sub Command1_Click()
Dim i as Integer
i = 1
AddOne i 'i will be passed by reference and increased by 1
Msgbox i 'Will print "2"
AddOne (i) 'i will be passed by value, so the return value will be lost!!
MsgBox i 'Will still print "2"!!
End Sub
因此,请注意如何使用括号,一个小小的更改可能会产生意想不到的效果。这是VB6的一个功能(在VB.NET中很乐意删除它),并且是合法的语法
但是,我不建议使用它,因为它会使代码更难阅读,正如@GTG所指出的,如果您不小心,当方法声明为ByRef时,可能会强制使用ByVal
因此,我的建议是始终使用括号。如果您看到方法名称和第一个括号之间有空格,如下所示:
SomeSubName(abc)
这会提醒您有问题(例如,如果强制通过ByVal
传递abc),因此您需要使用Call
,空格将被删除:
调用某些子名称(abc)
这使得所有方法调用在代码中保持一致
在罕见的情况下,如果您想强制传递abc
ByVal
,您可以这样做,这会让事情变得更加明显:
callsomesubname((abc))
我个人不使用或建议使用Call语句。我个人发现,带函数的paren和不带sub的paren有效地区分了两者。也就是说,我非常喜欢Matt使用call语句/byval/double-parens。在极少数情况下,当您需要它时,如果它是您使用call语句的唯一地方,它会使它从其他调用中脱颖而出。如果我活得够长,需要的话,我会用这个 相关:,你也可以写Call AddOne(i)“Call”关键字表示括号是必需的
Sub AddOne(ByRef i As Integer)
i = i + 1
End Sub
Sub Command1_Click()
Dim i as Integer
i = 1
AddOne i 'i will be passed by reference and increased by 1
Msgbox i 'Will print "2"
AddOne (i) 'i will be passed by value, so the return value will be lost!!
MsgBox i 'Will still print "2"!!
End Sub