| Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
bb:redbook:209 [2018/11/30 01:13] 127.0.0.1 внешнее изменение |
bb:redbook:209 [2020/10/29 07:08] (текущий) |
| |
| Пример использования: | Пример использования: |
| | MODULE TestTest_in; |
| | IMPORT Log, Math; |
| | |
| | PROCEDURE Do(IN a:INTEGER); |
| | VAR |
| | BEGIN |
| | Log.Int(a);Log.Ln; |
| | a:=3; |
| | Log.Int(a);Log.Ln; |
| | END Do; |
| | |
| | BEGIN |
| | END TestTest_in. |
| Как видно из примера, при попытке его скомпилировать, посыпятся сообщения об ошибках. И всё именно потому, что параметр с атрибутом IN доступен только для чтения. К тому же, параметр "а" определён как INTEGER, а допустимые типы — записи или массивы. [↑] | Как видно из примера, при попытке его скомпилировать, посыпятся сообщения об ошибках. И всё именно потому, что параметр с атрибутом IN доступен только для чтения. К тому же, параметр "а" определён как INTEGER, а допустимые типы — записи или массивы. [↑] |
| | |
| |
| Пример ниже показывает как работать с такими параметрами: | Пример ниже показывает как работать с такими параметрами: |
| | MODULE TestTest_out; |
| | IMPORT Log, Math; |
| | |
| | PROCEDURE Do(OUT z:INTEGER; r:REAL); |
| | VAR |
| | BEGIN |
| | z:=5; |
| | r:=-1; |
| | END Do; |
| | |
| | PROCEDURE Start*; |
| | VAR |
| | BEGIN |
| | Do(0,0) |
| | END; |
| | |
| | BEGIN |
| | END TestTest_out. |
| Как видно из примера, попытка скомпилировать модуль, с вызовом пройцедуры Do закончилась крахом, так как, в качестве аргументов передаются константы, а не переменные. По возврате из процедуры, чему присваивать возвращаемые значения? В примере, представленном ниже, все ошибки устранены и модуль успешно компилируется: | Как видно из примера, попытка скомпилировать модуль, с вызовом пройцедуры Do закончилась крахом, так как, в качестве аргументов передаются константы, а не переменные. По возврате из процедуры, чему присваивать возвращаемые значения? В примере, представленном ниже, все ошибки устранены и модуль успешно компилируется: |
| | MODULE TestTest_out; |
| | IMPORT StdLog, Math; |
| | |
| | PROCEDURE Do (OUT z: INTEGER; r: REAL); |
| | VAR |
| | BEGIN |
| | z := 5; |
| | r := - 1; |
| | END Do; |
| | |
| | PROCEDURE Start*; |
| | VAR |
| | z1: INTEGER; |
| | r1: REAL; |
| | BEGIN |
| | Do(z1, r1); |
| | StdLog.Int(z1); StdLog.Ln; |
| | StdLog.Real(r1); StdLog.Ln; |
| | END Start; |
| | |
| | BEGIN |
| | END TestTest_out. |
| | |
| | (!)TestTest_out.Start |
| Оператор RETURN мог бы возвращать несколько значений, во многих языках программирования такой функционал реализован. Но лучше оператор RETURN рассматривать как оператор управления потоком, с возможностью возврата кода выполнения операции, а не штатную возможность возвращать результат операций. Также стоит отметить, что возврат результата требует больше накладных расходов, чем непосредственное изменение переменной. | Оператор RETURN мог бы возвращать несколько значений, во многих языках программирования такой функционал реализован. Но лучше оператор RETURN рассматривать как оператор управления потоком, с возможностью возврата кода выполнения операции, а не штатную возможность возвращать результат операций. Также стоит отметить, что возврат результата требует больше накладных расходов, чем непосредственное изменение переменной. |
| |