Глава 4: Основы языка MapBasic
68 MapBasic Руководство пользователя
Передача параметров ссылкой
По умолчанию все параметры процедур в MapBasic передаются
ссылкой. При этом применяются следующие правила:
В операторе
Call все параметры, передаваемые в процедуру,
должны быть именами переменных.
Если в вызываемой процедуре передаваемому ссылкой параметру
присваивается новое значение, то изменяется значение
соответствующей внешней переменной. Другими словами,
процедура может использовать передачу параметров ссылкой
для изменения значений параметровпеременных.
Так, в последнем приведенном нами примере в операторе
Call в
качестве фактического параметра была указана переменная типа Date
report_date:
Call check_date( report_date )
В процедуре check_date соответствующий (формальный) параметр
носил имя last_date. Когда в процедуре check_date формальному
параметру last_date присваивается текущая дата (last_date =
CurDate( ) ), MapBasic автоматически изменяет и значение
фактического параметра report_date в процедуре
Main.
Передача параметров значением
Иногда бывает неудобно передавать параметр ссылкой. Все такие
параметры, передаваемые ссылкой, должны представлять собой имя
переменной, а иногда это бывает утомительно (например, если если Вы
не заводили переменных нужного типа).
Как и в других BASICподобных языках, в языке MapBasic Вы можете
использовать передачу параметров значением вместо передачи
ссылкой. Чтобы указать, что параметр передается значением, следует
применить ключевое слово
ByVal перед именем соответствующего
параметра в операторе
Sub...End Sub.
При передаче параметра значением действуют следующие правила:
• В операторе
Call (фактические) параметры не обязательно
должны быть именами переменных. Вы можете использовать в
операторе
Call как имена переменных, так и константы и
вообще любые выражения.
• Если в вызываемой процедуре передаваемому значением
формальному параметру присваивается новое значение, то это
значение не влияет на соответствующую переменную
(фактический параметр) в вызывающей процедуре. Иными
словами, передачу значением нельзя
использовать для
изменения значения фактического параметра.