Передача аргумента по позиции и по имени
Обновлен: Ноябрь 2007
При вызове процедуры Sub или Function, можно передать аргументы по позиции в порядке, в котором они отображаются в определении процедуры, и по имени, без учета этого порядка.
Когда аргумент передается по имени, необходимо указать его объявленное имя, затем двоеточие со знаком равенства (:=) и значение аргумента. Именованные аргументы можно указывать в любом порядке.
Например, приведенная ниже процедура Sub принимает три аргумента:
Sub studentInfo(ByVal name As String, _
Optional ByVal age As Short = 0, _
Optional ByVal birth As Date = #1/1/2000#)
Debug.WriteLine("Name = " & name & _
"; age = " & CStr(age) & _
"; birth date = " & CStr(birth))
End Sub
При вызове этой процедуры аргументы можно задавать по позиции, по имени или обоими способами.
Передача аргументов по позиции
Процедуру studentInfo можно вызвать с передачей аргументов по позиции, разделяя их запятыми, как показано в следующем примере:
Call studentInfo("Mary", 19, #9/21/1981#)
Если какой-либо необязательный аргумент в позиционном списке будет опущен, необходимо отметить его место запятой. В следующем примере вызывается studentInfo без аргумента age :
Call studentInfo("Mary", , #9/21/1981#)
Передача аргументов по имени
С другой стороны, можно вызвать процедуру studentInfo с аргументами, переданными по имени и также разделенными запятыми, как показано в следующем примере:
Call studentInfo(age:=19, birth:=#9/21/1981#, name:="Mary")
Смешанная передача аргументов по позиции и по имени
В одном вызове процедуры можно передавать аргументы и по позиции, и по имени, как показано в следующем примере:
Call studentInfo("Mary", birth:=#9/21/1981#)
В этом примере дополнительная запятая, отмечающая пропущенный аргумент age , не требуется, поскольку аргумент birth передается по имени.
Если аргументы передаются и по позиции, и по имени, то сначала следует указывать все позиционные аргументы. После первого аргумента, передаваемого по имени, все последующие аргументы также должны быть заданы по имени.
Задание необязательных аргументов по имени
Передача аргументов по имени особенно удобна при вызове процедуры с несколькими необязательными аргументами. Если аргументы задаются по имени, это позволяет опускать позиционные аргументы, не отмечая их подряд идущими запятыми. Кроме того, при передаче аргументов по имени легче следить за тем, какие аргументы заданы, а какие пропущены.
Ограничения при передаче аргументов по имени
Аргументы нельзя передавать по имени, чтобы избежать ввода обязательных аргументов. Опускать можно только необязательные аргументы.
Не допускается передача массива параметров по имени. Это объясняется тем, что число аргументов для массива, задаваемых через запятую при вызове процедуры, не определено, а компилятор не может связать с одним именем более одного аргумента.
См. также
Задачи
Практическое руководство. Передача аргументов в процедуру
Практическое руководство. Передача аргументов в процедуру по именам
Основные понятия
Параметры и аргументы процедуры
Передача аргументов по значению или по ссылке