Rexx-シグナル
Rexxでは、シグナル命令は一般に2つの目的で使用されます。
1つは、制御をプログラムの別の部分に移すことです。これは通常、他のプログラミング言語で使用されている頼りになるラベルのようなものです。
もう1つは、特定のトラップラベルに移動することです。
以下の命令コマンドのいずれかでsignalコマンドを使用すると、保留中の制御構造が自動的に非アクティブ化されます。
if ... then ... else..。
する...終了
do i = 1からn ... end [および同様のdoループ]
いつ...次に......などを選択します。そうでなければ...終わり
シグナルステートメントの一般的な構文は次のとおりです。
構文
signal labelName
signal [ VALUE ] labelExpression
シグナルステートメントの使用方法の例を見てみましょう。
例
/* 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 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.