1

Table関数getValue()、などを含むグローバルテーブルがある場合setValue()、への参照を格納できますか、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
4

2 に答える 2

3

Luaには「メンバー関数」のようなものはありません。である関数があります。関数は、グローバルテーブルに直接、作成した他のテーブルなど、どこにでも保存できます。関数(およびそのことに関するすべてのLua値)は、たまたま保存されているテーブルとは関連付けられていません。

関数をどこかに保存したい場合(そして「参照」を作成することはそれをどこかに保存することに他なりません)、あなたはそうすることができます。

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

于 2012-04-23T03:59:54.907 に答える
0

クロージャーとしていつでも「バインドされた」関数を作成できます。

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

do_stuff_with(TableGetValue)
于 2012-04-26T05:06:20.230 に答える