Rexx - 信号



在 Rexx 中,signal 指令通常用于两种目的,它们是:

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

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

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

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

  • do ... end

  • do i = 1 to n ... end [以及类似的 do 循环]

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

signal 语句的通用语法如下所示:

语法

signal labelName  
   
signal [ VALUE ] labelExpression 

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

示例

/* Main program */ 
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 的值更改为如下程序所示的整数:

/* Main program */ 
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

也可以像以下程序所示那样转移到标签的值:

/* Main program */ 
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 指令也可用于将控制权转移到陷阱标签。

陷阱标签转移的通用语法如下所示:

语法

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

其中,

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

  • Label - 程序应转移到的可选标签。

让我们来看一个使用陷阱标签转移的示例。

示例

/* Main program */ 
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.
广告