Luaドットとコロン

816 ワード

Luaドットとコロン
lua自体にはクラス機能がなく,そのクラス機能はメタテーブルによって実現される.クラスの関数呼び出しはobj:function方式によって行われる.しかし、クラスのメンバーの付与はobjを介して行われる.var方式で実現した.lua 5.1のマニュアルをめくると、コロンについてはこのような説明しかないことがわかりました.(lua 5.1マニュアル)
コロン構文は、メソッドを定義するために使用できます.すなわち、関数には暗黙的なパラメータselfがあります.したがって、function t.a.b.c:f(params)body endは、t.a.b.c.f=function(self,params)body endという表記の文法糖である
そして私は次のテストをして、コロンの使い方を明らかにしました.
function test()
	t.f()
	t:g()
	t:h()
	t.i()
    t:h()
    t.j(t)
    t:h()
end

t = {}

function t.f()    
    print("tf");
end

function t:g()
    self.x = 10
end

function t:h()
    print(self.x)
end

function t.i()    
    t.x = 20
end

function t.j(k)    
    k.x = 30
end

出力:
[LUA-print] tf [LUA-print] 10 [LUA-print] 20 [LUA-print] 30
コロンを発見するとfunction間の通信のためにtableが内蔵されます.