Подтвердить что ты не робот

Что делает ключевое слово Call в VB6?

В нашем проекте есть некоторый код, который выглядит примерно так:

Private Sub Method1()
    Call InnerMethod
End Sub

Private Sub Method2()
    InnerMethod
End Sub

Private Sub InnerMethod()
    '' stuff
End Sub

В чем преимущество использования метода 1 над методом2?

4b9b3361

Ответ 1

Из MSDN:

Вам не требуется использовать вызов при вызове процедуры. Однако, если вы используете ключевое слово Call для вызова процедуры, которая требует аргументы, список аргументов должен быть заключенные в круглые скобки. Если вы опустите ключевое слово Call, вы также должны опустить круглые скобки вокруг списка аргументов. Если для вызова используется синтаксис вызова любой встроенный или определяемый пользователем функция, возвращаемое значение функции отбрасывается.

Например:

Sub Proc1()
    Debug.Print "Hello World"
End Sub

Sub Proc2(text As String)
    Debug.Print "Hello " & text
End Sub

В непосредственном окне, если вы введете

Proc1

а затем печать "Hello World" . Если вы введете

Call Proc1

а затем печать "Hello World" . Если вы введете

Proc2 "World"

а затем печать "Hello World" . Если вы введете

Call Proc2 "World" 

появляется ошибка компиляции. Вам нужно будет ввести

Call Proc2("World")

Ответ 2

Вызов не делает ничего особенного, кроме вызова метода. Это зависание от старых дней Basic, когда все строки должны были начинаться с ключевого слова. "Let" - это еще одно из этих ключевых слов, которое всегда было поставлено перед назначением, но больше не требуется.

Метод 1 и Метод2 делают то же самое.

Ответ 3

Я обнаружил существенное различие в ключевом слове "call" с функциями, имеющими ByRef Arguments (я нашел это в редакторе VBA MS-Access). Если вы вызываете функцию без ключевого слова "Вызов", ByRef aruments не будет установлен для calle. Для Ex:

Private Function Test(Optional ByRef refArg As String) As Boolean    
    refArg = "Test"
    Test = True
End Function

Если вы вызываете функцию без ключевого слова Call

Dim a As String
Test(a)

a будет пустой строкой, после возврата вызова

Если вы вызываете функцию с ключевым словом Call например

Dim a As String
Call Test(a)

a будет содержать строку Test

Подробное объяснение представлено в следующей ссылке: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx

Ответ 4

Нет никакой разницы.

Ответ 5

Здесь post, который описывает, когда вам нужно использовать вызов vs, не используя его, и когда в круглые скобки вокруг ваших параметров.

Вы также можете узнать больше о вызов из MSDN. По сути, основное различие заключается в том, что при использовании вызова для вызова функции вы не можете получить возвращаемое значение.