2012-04-23 11 views
1

内の関数への参照、私は機能getValue()setValue()を持っているグローバルテーブルTableなどを持っている場合、私はTable.getValueへの参照を格納することができますか私はTableへの参照を格納し、メンバ関数を呼び出す必要がありますか?ルア - テーブル

lua_getglobal(L, "Table"); 

lua_getfield(L, -1, "getValue"); 
getValueRef = luaL_ref(L, LUA_REGISTRYINDEX); 

lua_getfield(L, -1, "setValue"); 
setValueRef = luaL_ref(L, LUA_REGISTRYINDEX); 

lua_pop(L, 1); // Pop "Table" off of the stack 

答えて

3

ルアには「メンバー関数」はありません。関数は単純にの値です。ファンクションはどこにでも、グローバルテーブルに直接作成することも、作成する他のテーブルに格納することもできます。関数(およびすべてのLua値)は、格納されるテーブルとは関連付けられません。

関数をどこかに格納したい(そして、 "参照"を作成することは、それをどこかに格納すること以上のことです)。

FYI:Luaの「参照」に直接レジストリを使用することはお勧めできません。私はあなたの参照に使用するレジストリの特定のスロットに格納するテーブルを作成することをお勧めします。もちろん、私はあなたが何をしているのかについて「参考文献」を使用することは良い考えではないと言います。

+0

Luaのマニュアルを誤って解釈するために私の能力は、私を驚かせたことがありません。ありがとう。 – Mastax

0

あなたは常にクロージャとして「バウンド」関数を作成することができます

local tbl=Table 
local function TableGetValue(key) 
    return tbl:getValue(key) 
end 

do_stuff_with(TableGetValue)