assert関数

assert()は、第一引数にboolean、第二引数にオプションでエラーメッセージを取る。呼び出しが成功した場合は、関数の戻り値を返す。例えば、以下のio.open()はエラーの場合、第一引数にnil、第二引数にエラーメッセージを返す。なので、以下の呼び出し方は定石となる。

file = assert(io.open(name, 'r'))

逆に、自作の関数で、エラー処理をする場合、以下の2パターンがある。

  1. error()関数を呼び出し、エラーを発生させる
  2. 失敗の場合は、第一引数にnil(もしくはfalse)、第二引数にエラーメッセージを返す

つまり、Luaではエラーを上側に伝播したい場合、エラーコードを返すのではなく、nilとエラーメッセージを返すのが基本。また、第二引数の型は文字列ではなく任意でよく、エラーコードを返しても良い。