Lua ではerror()
、メッセージ引数を指定して標準関数を呼び出すと、指定されたエラー メッセージが出力され、スタック トレースも出力されます。たとえば、次のコードを実行します。
print("hello")
error("oops!")
print("world")
次の出力が得られます。
$ lua test.lua
hello
lua: test.lua:2: oops!
stack traceback:
[C]: in function 'error'
test.lua:2: in main chunk
[C]: ?
ただし、引数なしで呼び出すとerror()
、Lua はスタック トレースを出力せずに静かに終了するようです。このコードの実行:
print("hello")
error() // no arguments provided
print("world")
この出力は次のようになります。
$ lua test2.lua
hello
message
ドキュメントには、最初の引数の省略については何も書かれていません。
エラー (メッセージ [, レベル])
最後に呼び出された保護された関数を終了し、メッセージをエラー メッセージとして返します。関数エラーは返されません。通常、error はメッセージの先頭にエラー位置に関する情報を追加します。level 引数は、エラー位置を取得する方法を指定します。レベル 1 (デフォルト) では、エラー位置はエラー関数が呼び出された場所です。レベル 2 は、エラーを呼び出した関数が呼び出された場所をエラーに示します。等々。レベル 0 を渡すと、エラー位置情報がメッセージに追加されるのを回避できます。
これが意図した動作なのか、そうでないのか疑問に思っています。error
IMOは、メッセージが提供されていなくても、スタックトレースを出力する(そして、デフォルトのテキストなどを出力する)ことは理にかなっています。それがassert()
関数の仕組みだからです。