Luaのコロン区切りとピリオド区切り
関数名のコロン区切りは引数の1つ目に「self」(javaやc#でいうthis変数)を自動的に追加してくれる記法のようだ。 ピリオド区切りでは「self」を明示しなければならない。
function object:foo(x)
は
function object.foo(self,x)
の省略記法。
関数を呼び出すときも同じ。
object:foo()
は
object.foo(obj)
の省略記法。
self変数を内部的に利用している関数をピリオド区切りで呼び出す際には、明示的にself変数を渡さないと、下記のように「self変数が存在しない」というエラーが発生する。
attempt to index a nil value (local 'self')