Eval() とデバッグ¶
下記の用法です。
Try/Catch/Done によるエラー処理
Eval() 関数
Raise() 関数
Assert() 関数
Try/Catch/Done¶
文法:
Try
ステートメント...
Catch
ステートメント...
Done
まず Try ブロックのステートメントが実行されます。 そしてエラーが発生すると catch ブロックのステートメントが実行されます。
catch ブロックの内側では変数 cCatchError でエラーメッセージを取得できます。
用例:
Try
see 5/0
Catch
see "Catch!" + nl + cCatchError
Done
実行結果:
Catch!
Error (R1) : Cann't divide by zero !
Eval() 関数¶
Eval() 関数は実行時に文字列からコードを実行します。
文法:
Eval(cCode)
用例:
Eval("nOutput = 5+2*5 " )
See "5+2*5 = " + nOutput + nl
Eval("for x = 1 to 10 see x + nl next")
Eval("func test see 'message from test!' ")
test()
実行結果:
5+2*5 = 15
1
2
3
4
5
6
7
8
9
10
message from test!
Return 命令で値を返せます。
用例:
see Eval("return 5*5")
実行結果:
25
Raise() 関数¶
Raise() 関数は例外を発生します。
文法:
Raise(cErrorMessage)
この関数はエラーメッセージを表示した後にプログラムを終了します。
raise() 関数で生成された例外は Try/Catch/Done により回避できます。
用例:
nMode = 10
if nMode < 0 or nMode > 5
raise("Error : nMode not in the range 1:4")
ok
実行結果:
Line 4 Error : nMode not in the range 1:4
In raise in file tests\raise.ring
用例:
try
testmode(6)
catch
see "avoid raise!"
done
testmode(-1)
func testmode nMode
if nMode < 0 or nMode > 5
raise("Error : nMode not in the range 1:4")
ok
実行結果:
avoid raise!
Line 12 Error : nMode not in the range 1:4
In raise In function testmode() in file tests\raise2.ring
called from line 7 in file tests\raise2.ring
Assert() 関数¶
Assert() 関数はコードの実行前に条件をテストします。
テストに失敗した場合は、アサートの条件を有するエラーメッセージを表示後にプログラムを終了します。
文法:
Assert( 条件 )
用例:
x = 10
assert( x = 10)
assert( x = 100 )
実行結果:
Line 3 Assertion Failed!
In assert in file tests\assert.ring