Lua C API - 将属性映射到函数

时间:2013-10-10 21:07:06

标签: c lua metatable lua-api

是否可以在Lua中将函数作为属性推送?

现在,我可以将它们作为字段推送到具有Get / Set功能:

lua_pushcfunction(L,L_Getter);
lua_setfield(L, -2, "GetValue");    

lua_pushcfunction(L,L_Setter);
lua_setfield(L, -2, "SetValue");    

在Lua中调用它们就像这样:

MyObject:SetValue("NewValue")

是否可以在不使用元表的情况下推送映射到C函数的属性?我可以将metatable中的__index__newindex映射到自定义函数,但我想知道是否有更简单的方法。最终,我想要没有metatables的以下语法:

MyObject.CValue = 1
print(MyObject.CValue)

没有__index__newindex这是否可行?

1 个答案:

答案 0 :(得分:3)

没有metatables?不,Metamethods是调用函数来评估tbl.foo的唯一方法。您可以将MyObject设为用户数据,但您需要使用metatable来提供__index元方法。

学会爱metatables。它们是C / Lua集成的支柱。