1

CI でグローバル メタテーブルを作成します。

luaL_newmetatable(L, "WebSocketClient");
lua_pushliteral(L, "close");
lua_pushcfunction(L, lws_sock_close);
lua_rawset(L, -3);
lua_pop(L, 1);

しかし、私のLuaでは関数を追加できません:

function WebSocketClient:read_frame()
   --foo
end

次のエラーが表示されます。

attempt to index local 'WebSocketClient' (a nil value)

このメタテーブルを Lua コードで使用できるようにして、関数を追加できるようにするにはどうすればよいですか?

4

2 に答える 2

2

@silentbicycle の回答に基づくコードの提供:

lua_newtable(L);
lua_pushliteral(L, "close");
lua_pushcfunction(L, lws_sock_close);
lua_rawset(L, -3);
lua_setglobal(L, "WebSocketClient");

参考までに、メタテーブルを次のように設定します。

lua_newtable(L);
lua_newtable(L);
lua_pushliteral(L, "__index");
lua_getglobal(L, "WebSocketClient");
lua_settable(L, -3);
lua_setmetatable(L, -2);
lua_settable(L, -3);
于 2013-05-16T16:48:45.013 に答える