スクリプト制御系関数の変更点および新規に実装された関数についての解説です。
変更点
eval
UWSCとは異なり式だけではなく文も評価できるようになりました。UWSCではスクリプト評価とevalによる評価の動作に細かな差がありましたが、UWSCRではスクリプト評価と同等の評価を行います。また、UWSCではeval内で代入を行うには:=
と記述する必要がありましたが、UWSCRでは=
による代入も可能です (:=
による代入も動作します)。
dim a = 1
// eval内での代入
eval("a = 5") // = で代入可能
print a // 5
eval("a := 2") // := でもOK
print a // 2
// 文の評価
eval("if a > 3 then a -= 1 else a += 1")
print a // 3
sleep
引数として関数を渡した場合、関数の実行結果が真であればsleepし続けるようになります。
C:\test\test.uws
print "hoge.txtが生成されるのを待ちます"
sleep(|=> ! fopen("hoge.txt", F_EXISTS)|)
print "hoge.txtが見つかりました"
powershell
# 上記スクリプト実行中に以下を実行すればsleepが解除される
ni -Path C:\test -Name hoge.txt
新規
エラー関連
raise
任意の実行時エラーを発生させられます。
if ! fopen("hoge.txt", F_EXISTS) then
raise("hoge.txtがありません", "ファイル読み込みエラー")
// [ファイル読み込みエラー] hoge.txtがありません
endif
fid = fopen("hoge.txt", F_READ)
tryで捕捉することもできます。
try
raise("tryで捕捉できる")
except
print TRY_ERRLINE // test.uws 2行目: raise("tryで捕捉できる")
print TRY_ERRMSG // [ユーザー定義エラー] tryで捕捉できる
endtry
assert_equal
2つの値を比較し、一致しない場合は実行時エラーになります。
dim a = b := 5
dim c = 3
assert_equal(a, b) // 一致するので何も起こらない
assert_equal(a, c)
// [assert_equalエラー] left: 5; right: 3
非同期処理
Task, WaitTask
これらの関数を用いることでユーザー定義関数を非同期に実行することができます。詳しくはUWSCRの新機能:非同期処理 #UWSC - Qiitaを参照してください。