Signals

优质
小牛编辑
135浏览
2023-12-01

在Rexx中,信号指令通常用于两个目的,即 -

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

  • 另一种是去特定的陷阱标签。

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

  • 如果......那么......其他......

  • 做...结束

  • 做我= 1到n ...结束[和类似的做循环]

  • 选择......然后......等等。 否则......结束

signal语句的一般语法如下所示 -

语法 (Syntax)

signal labelName  
signal [ VALUE ] labelExpression 

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

例子 (Example)

/* 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'

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

输出 (Output)

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

陷阱标签转移激活/取消激活

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

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

语法 (Syntax)

signal ON conditionName [ NAME Label ] 
signal OFF conditionName

Where,

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

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

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

例子 (Example)

/* 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.