*Luaリファレンス 要注意点 ~ASSERT 例外~ [#z693f38b]

**assert [#f7fd992c]
-第1引数がfalseかnilならエラーを返し、それ以外なら、値をそのまま返す。第2引数はメッセージ
>~
C言語の場合は、~
#sh(cpp){{
#define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
}}
とあるように値を返していないため、~
デバッグコンパイル時のエラーチェックぐらいにしかならないが、
''luaでは、エラー時以外は値をそのまま返すのでステートメントの中に自然と含めて記載することが多い。''
~
#sh(cpp){{
print "enter a number:"
n = assert(io.read("*n"), "invalid input")
}}
**pcall [#fc5823c9]
>''pcall''関数を使うことで、保護モードで関数の実行が可能である。~
(保護モード=エラーを補足するモード、try..catch的、どっちかといえば、Perlのevalの方が近そうだが…)~
この場合、「エラーが発生しなければ、返値の1番目が「true」」,「 発生したら1番目が「false」、2番目が「エラーメッセージ」」となる。~
trueの場合、返り値の2番目以降が元来の関数の返り値の1番目以降となる。~



トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS