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.
廣告