error - 手続きから返されるエラー
ERROR - 手続きから返されるエラー (旧式)
使い方
error msgString, msgParam1, msgParam2, ...
ERROR(expr1, expr2, ...)
パラメータ
msgString - エラーメッセージのテキスト
msgParam1, msgParam2, ... - msgString に代入するためのパラメータ
expr1, expr2, ... - 式列 (なくてもよい)
|
説明
|
|
•
|
error 文は例外を発生させます。現在実行中の命令文の列が中断されて、例外ハンドラに出会うまで、ブロックと手続き呼び出しのスタックがポップされます。そうでなければ、実行はトップレベルに戻ります (この場合には、その例外はエラーになります)。
|
•
|
msgString はエラーメッセージに含まれるべき他のパラメータとは独立な文字列です (たとえば、非割り当て変数について説明する文字列なら、その変数を具体的な名前を使って述べてはいけません)。しかし、その文字列は番号付きのパラメータを置く場所を含むことができます。その位置は '%n' で指定します。ただし、n は 0 から 9 までの整数です。
|
•
|
msgParam1, msgParam2, ... は 1 個以上の任意の Maple オブジェクトで、発生した例外をエラーメッセージとして表示するときに、msgString の中の番号付きパラメータの位置に代入されます。
|
•
|
もし msgString が指定されていなければ、error はその直前に発生した例外を再び発生させます。
|
•
|
error 文はその引数を評価してから、例外オブジェクトを生成します。その例外オブジェクトは次の要素からなる式列です:
|
- その例外が発生した手続きの名前(以下では procName とします)
その例外がトップレベルで発生したときは、ここには定数 0 が置かれます。
- msgString
- msgParams(もしあれば)
•
|
生成された例外オブジェクトは大域変数の lastexception に式列として代入されます。msgString と msgParam の列も lasterror に記号として代入されます (これは旧バージョンとの互換性のためです)。
|
•
|
msgString において、番号付きパラメータは実際の値や名前を配置するための場所として使われます。たとえば、"f has a 2nd argument, x, which is missing" というエラーメッセージは msgString の文字列 "%1 has a %-2 argument, %3, which is missing" と msgParamの値 f, 2, x から構成されます。
|
•
|
各番号付きパラメータはパーセント記号 "%" の後にオプションでマイナス符号 "-" を置き、整数 n を作るように 1 個以上の数字を並べます。メッセージを表示するときに、n番目の msgParam がその番号付きパラメータに代入されます。
|
•
|
番号付きパラメータが %n の形をしていれば、n番目の msgParam は lprint 表記で表示されます。
|
•
|
番号付きパラメータが %-n の形をしていれば、n番目の msgParam は Maple 整数であると仮定されて、序数の形で表示されます。たとえば、値 2 は "2nd" のように表示されます。
|
•
|
特別なパラメータ %0 は msgParam のすべてをコンマと空白で区切って表示します。
|
•
|
一貫性を保つために、 Maple の WARNING 関数も msgString と msgParam を使っています。
|
•
|
Maple V Release 5.1 以前では、例外を発生させる仕組みとして、ERROR 関数が用意されていました。この旧式の関数は Maple 9.5 でもサポートされています。
|
•
|
ERROR 関数の呼び出しは、次に述べる若干の例外を除けば、error 文を実行することと同じです。
|
•
|
最初の引数が番号付きパラメータを置く位置を含む文字列ならば、ERROR は error とまったく同様に働きます。ERROR を文字列か記号である1個の引数だけで呼び出した場合も同様です。
|
•
|
複数の引数があり、その最初の引数が文字列か記号で、パラメータを置く位置が指定されていなければ、ERROR(a,b,c) は error "a, %0",b,c と同値です。 つまり、最初のパラメータに ", %0" が追加されて msgString になっていて、残りのパラメータがこの msgString に対する msgParam になっています。
|
•
|
引数の個数が任意で、最初の引数が文字列でも記号でもなければ、ERROR(a,b,c) は error "%0",a,b,c と同値です。つまり、msgString "%0" が追加されて、引数のすべてが msgParam になります。
|
•
|
いずれの場合にも、lasterror には ERROR に渡されたパラメータと同じものが割り当てられ、lastexception には (上で述べたような) それと同値な error 文を実行したときと同じものが割り当てられます。
|
•
|
error の意味は Maple V Release 5.1 以前における ERROR の利用と互換性があるようにきちんと設計されています。
|
|
|
例
|
|
>
|
f := proc (x) if x<0 then error "invalid x: %1", x else x^(1/2) end if end proc:
f(-3);
|
Error, (in f) invalid x: -3
| |
| (2.1) |
| (2.2) |
>
|
try
f(-3):
printf("%s\n","no error occured")
catch "invalid x":
printf("%s\n","error occured")
catch :
error
end try;
|
>
|
# Backward compatibility of ERROR:
ERROR(`invalid arguments`);
|
| (2.3) |
| (2.4) |
>
|
ERROR(`invalid arguments`,2,x);
|
Error, invalid arguments, 2, x
| |
| (2.5) |
| (2.6) |
| (2.7) |
| (2.8) |
>
|
StringTools:-FormatMessage( %[2..-1] );
|
| (2.9) |
|
|