Rexx - 信号指令

在Rexx中,信号指令一般有两个用途,分别是 −

  • 一是将控制权转移到程序的另一部分。 这通常类似于其他编程语言中使用的转到标签。

  • 另一个是转到特定的陷阱标签。

如果在以下任何指令命令中使用信号命令,则挂起的控制结构将自动停用。

  • if ... then ... else ...

  • do ... end

  • do i = 1 to n ... end [and similar do loops]

  • select when ... then ... ...etc. otherwise ... end

信号语句的一般语法如下所示 −

语法

signal labelName  
   
signal [ VALUE ] labelExpression 

让我们看一个如何使用信号语句的示例。

示例

/* 主程序 */
n = 100.45 

if \ datatype( n, wholenumber ) then 
   signal msg 
   say 'This is a whole number' 
   return 0 
msg : 
   say 'This is an incorrect number'

上述程序的输出如下所示。

输出

This is an incorrect number.

如果将变量 n 的值更改为整数,如以下程序所示 −

/* 主程序 */
n = 100 

if \ datatype( n, wholenumber ) then 
   signal msg 
   say ' This is a whole number ' 
   return 0 
msg : 
   say ' This is an incorrect number ' 

您将得到以下输出 −

This is a whole number

还可以传递标签的值,如下面的程序所示 −

/* 主程序 */
n = 1 

if \ datatype( n, wholenumber ) then 
   signal msg 

if n < 1 | n > 3 then 
   signal msg  
   signal value n 
   3 : say 'This is the number 3' 
   2 : say ' This is the number 2' 
   1 : say ' This is the number 1' 
   return n 
msg : 
   say ' This is an incorrect number ' 
   exit 99 

上述程序的输出如下所示 −

This is the number 1

陷阱标签传输激活/停用

正如我们之前提到的,信号指令也可用于将控制权转移到陷阱标签。

陷阱标签传输的一般语法如下 −

语法

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

其中,

  • conditionName − 这是应打开或关闭信号的条件。

  • Label − 程序应转向的可选标签。

让我们看一个使用陷阱标签传输的示例。

示例

/* 主程序 */
signal on error 
signal on failure 
signal on syntax 
signal on novalue 
beep(1) 
signal off error 
signal off failure 
signal off syntax 
signal off novalue 
exit 0 
error: failure: syntax: novalue: 
say 'An error has occured' 

在上面的例子中,我们首先打开错误信号。 然后我们添加一条会导致错误的语句。 然后,我们使用错误陷阱标签来显示自定义错误消息。

上述程序的输出如下所示 −

An error has occurred.