Vb6 是否可以在没有括号的情况下调用VB函数?

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

我正在查看VB6代码,我看到一个声明如下-

       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