エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Luaの戻り値のない関数の戻り値

入門Luaプログラミングを読んでいると、次のような記述がありました。

関数内にreturn文が存在しない場合は関数の出力がないということなので、nilが戻り値になる、と考えます。


入門Luaプログラミング P.33


「と考えます」が気になったのですが、次のような関数の場合はnilが返るのかな?と思って試してみたところ…。

function f()
end


戻り値を表示してみる。

print(f())

結果。

なにも表示されない。


ぢゃ、型は?

print(type(f()))

結果、エラーになりました。


nilを返す関数と比べてみると。

function g()
  return nil
end
print(g())

nil
print(type(g()))

nil


これは、書籍の誤り…?

でも次の式は評価できます。

if f() then print("TRUE") else print("FALSE") end

FALSE


戻り値のない関数の値は論理式では偽として評価される模様。

仕様なのか、仕様外なのか、あとでLuaのソースを調べてみよう。