63

“退出子程序”或“返回”似乎都完成了同样的事情——退出子程序。它们在幕后工作的方式有什么不同吗?

那是,

Private Sub exitNow()
    Exit Sub
End Sub

或者

Private Sub exitNow()
    Return
End Sub
4

7 回答 7

74

从文档:

在 Sub 或 Set 过程中,Return 语句等效于 Exit Sub 或 Exit Property 语句,并且不得提供表达式。

因此,在这种情况下,它们是相同的。

Return (<value>)用于函数和property.get。显然在这种情况下略有不同)。

于 2009-06-17T01:23:59.303 回答
23

我倾向于更Return喜欢Exit Sub. 因为偶尔你会从Sub变为Function。在这种情况下Exit Sub可以转换为Exit Function,但这假设函数名之前有一个分配(类似于 VB 6),这很可能没有发生。Return会捕捉到这种情况 - 如果方法应该返回一个值,Return没有参数将在编译时失败。

于 2017-04-19T16:27:22.000 回答
7

如果您检查 2 条语句的 IL 输出,它们是相同的。但是,由于 'return' 意味着将某些东西推回给调用者,所以严格来说,'Exit Sub' 更适合在 Sub 中使用。

于 2012-09-25T05:44:43.987 回答
4

在这种情况下,它们是相同的。

但是,从代码可读性的角度来看,“Exit Sub”会更清晰,因为“Return”表示某些值正在用作输出(子例程不是这种情况)。

于 2014-02-04T14:27:12.950 回答
1
  • 首先,Procedures 带有 sub,我们应该知道我们正在处理不返回特定值的特定程序,具有传递某些特定参数甚至不传递任何参数的能力。如:
  • 打印一些东西()。
  • 计算整数的阶乘CalcFact(X)
  • 为特定任务执行一些流程。

  • 函数是一个特定的过程,通过传递一些特定的参数来实现特定的任务,它必须返回一些可以用来完成整个任务的值,例如验证用户名和用户密码。

简而言之 Sub 不返回值,我们直接调用它"Print HelloWorld()",而函数则如下:

  • ValidUsersNameAndPass("Johne","jOhNe13042019") ' 这可以返回一个布尔值。
  • ValidUsersNameAndPass("Johne","jOhNe13042019"); // 这可以返回一个布尔值。
于 2019-04-12T21:28:00.110 回答
0

我想确认它们在 lambda 表达式中的行为也相同,它们确实:

Sub test()

    Dim a As Action = Sub() Exit Sub
    Dim b As Action = Sub() Return

    a()
    b()

    MsgBox("Yes they do!") 
 End Sub
于 2016-07-18T18:52:30.767 回答
-1

虽然有像保护子句这样的例外,但在大多数情况下,我会认为要么是方法太长的迹象。

于 2009-06-17T01:24:24.450 回答