Что делает ключевое слово Call в VB6? - PullRequest
33 голосов
/ 26 января 2009

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

Private Sub Method1()
    Call InnerMethod
End Sub

Private Sub Method2()
    InnerMethod
End Sub

Private Sub InnerMethod()
    '' stuff
End Sub

В чем преимущество метода Method1 по сравнению с Method2?

Ответы [ 5 ]

37 голосов
/ 26 января 2009

Из MSDN :

Вы не обязаны использовать Call ключевое слово при вызове процедуры. Однако, если вы используете ключевое слово 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")
11 голосов
/ 26 января 2009

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

Method1 и Method2 делают одно и то же.

5 голосов
/ 01 июля 2010

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

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

2 голосов
/ 26 января 2009

Вот запись , которая описывает, когда вам нужно использовать вызов, а не использовать его и когда заключать в скобки параметры.

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

2 голосов
/ 26 января 2009

Разницы нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...