X
参数inout pers
i 比如,FOR循环变量(参见第81页的For语句)、errno、intno。
ii 执行错误(参见第17页的错误分类)。
PROC glue ( \switch on | switch off, ... ! switch parameters ...
IF Present(off ) THEN
! check presence of optional parameter 'off' ...
ENDPROC
glue\off, pos2; ! argument use
数组
! num-matrix parameter
技术参考手册 - RAPID语言内核 87
5.2 参数声明 续前页
5.3 程序的范围规则
定义
对象的范围表示名称显示范围。预定义程序的范围包括RAPID模块。下列范围规则对 用户程序有效:
• 局部用户程序的范围包含其所处模块。
• 全局用户程序的范围还包括任务缓冲区的其他模块。
• 在范围之内,用户程序隐藏了同名的预定义对象。
• 在范围之内,局部用户程序隐藏了同名的全局模块对象。
• 同一模块中声明的两个模块对象不可同名。
• 任务缓冲区中,两个不同模块中声明的两个全局对象不可同名。
• 全局用户程序和模块不可共享同一名称。
其他范围规则
参数方面的范围规则与程序变量方面的范围规则相符。有关程序变量范围的信息,请 参见第42页的数据对象的范围规则。
有关任务模块的信息,请参见第115页的任务模块。
88 技术参考手册 - RAPID语言内核
5.3 程序的范围规则
5.4 无返回值程序声明
定义
无返回值程序声明为程序定义绑定一个标识符。
<procedure declaration> ::=
PROC <procedure name>
'(' [ <parameter list> ] ')'
<data declaration list>
<statement list>
[ BACKWARD <statement list> ]
[ ERROR [ <error number list> ] <statement list> ] [ UNDO <statement list> ]
ENDPROC
<procedure name> ::= <identifier>
<data declaration list> ::= { <data declaration> } 数据声明表可包含注释,请参见第28页的备注。
求值和终止
将以return语句(参见第73页的Return语句)来明确终止对无返回值程序的求值,或 在到达无返回值程序末尾(ENDPROC、BACKWARD、ERROR或UNDO)时,即暗示着其 执行终止。
比如,让num数组中的所有元素乘以:
PROC arrmul( VAR num array{*}, num factor) FOR index FROM 1 TO Dim( array, 1 ) DO
array{index} := array{index} * factor;
ENDFOR
ENDPROC ! implicit return
预定义Dim有返回值程序将返回数组的维度。
后期绑定
后期绑定调用中将用到的无返回值程序将被视作一个特例。即,(从同一后期绑定语 句调用的)无返回值程序的参数在可选/必要参数和模式方面应匹配,并且无返回值程 序的参数也应为同一基本类型。举例而言,如果需要一个无返回值程序的第二个参数,
并将该参数声明为VAR num,那么,被同一后期绑定语句调用的其他无返回值程序的 第二个参数,应具备第二个基本num型的必要VAR参数。这些无返回值程序也应具备同 样的参数号。如果存在相互排斥的可选参数,那么,这些可选参数也必须在同等意义 上匹配。
技术参考手册 - RAPID语言内核 89
5.4 无返回值程序声明
5.5 有返回值程序声明
定义
有返回值程序声明为有返回值程序定义绑定一个标识符。
<function declaration> ::=
FUNC <data type>
<function name>
'(' [ <parameter list> ] ')'
<data declaration list>
<statement list>
[ ERROR [ <error number list> ] <statement list> ] [ UNDO <statement list> ]
ENDFUNC
<function name> ::= <identifier>
有返回值程序可具备(返回)任意值数据类型(包括任何可用的安装数据类型)。有 返回值程序无法具备维度,即,有返回值程序无法返回数组值。
求值和终止
必须以return语句来终止有返回值程序的求值,参见第73页的Return语句。
如,可返回矢量长度。
FUNC num veclen(pos vector)
RETURN sqrt(quad(vector.x) + quad(vector.y) + quad(vector.z));
ERROR
IF ERRNO = ERR_OVERFLOW THEN RETURN maxnum;
ENDIF
! propagate "unexpected" error RAISE;
ENDFUNC
90 技术参考手册 - RAPID语言内核
5.5 有返回值程序声明
5.6 软中断程序声明
定义
软中断程序声明为软中断程序定义绑定一个标识符。软中断程序可用connect语句与 中断(编号)关联起来,请参见第78页的Connect语句。请注意,一个软中断程序可 与许多(或不与任何)中断关联起来。
<trap declaration> ::=
TRAP <trap name>
<data declaration list>
<statement list>
[ ERROR [ <error number list> ] <statement list> ] [ UNDO <statement list> ]
ENDTRAP
<trap name> ::= <identifier>
求值和终止
将利用return语句(参见第73页的Return语句)来明确终止软中断程序的求值,或者,
在到软中断程序的末尾(endtrap、error或undo)时,即暗示着终止软中断程序的 求值。将从中断点继续执行程序。
比如,响应低压中断。
TRAP low_pressure open_valve\slow;
! return to point of interrupt RETURN;
ENDTRAP
比如,响应高压中断。
TRAP high_pressure close_valve\fast;
! return to point of interrupt RETURN;
ENDTRAP
技术参考手册 - RAPID语言内核 91
5.6 软中断程序声明