是否可以使用Luabind从c ++应用程序中实例化Lua“类”?为了说明问题,请考虑以下简单的Lua脚本:
class "Person"
function Person:__init(name)
self.name = name
end
function Person:display()
print(self.name)
end
我可以在同一个Lua脚本中实例化这个类,一切正常。但是,我想在我的c ++应用程序中使用Luabind从这个类中实例化一个新对象。我尝试过以下方法:
luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
myObject["display"]();
我希望看到“John Doe”输出到控制台。相反,我遇到了Lua运行时错误。创建新对象的调用似乎有效。问题似乎是显示功能中的self
为零。
答案 0 :(得分:1)
self 是 nil ,因为如果你在lua中使用“:” - 运算符,那么lua将自动提供调用者作为第一个参数。 这样:
somePerson:display() == somePerson.display(somePerson)
因此你也需要提供自我论证:
luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
myObject["display"](myObject);
甚至更好:使用可用于此目的的luabind中的简单函数
luabind::object myObject = luabind::globals(L)["Person"]("John Doe");
luabind::call_member<void>(myObject, "display");