繁体   English   中英

如何将对象从c#传递给lua的函数?

[英]How do you pass an object from c# to lua's function?

我在c#上使用Lua接口将我创建的对象传递给lua的函数。 它成功调用了函数,但是lua继续抛出错误:

LuaInterface.LuaException:/hook.lua:32:尝试索引本地'objj'(一个零值)

这是c#代码:

public class PerObj
{
    public string name;
    public PerObj() 
    {
    }
}

PerObj obj = new PerObj();
LuaFunction lf = lua.GetFunction ("item.HookMe");
lf.Call(obj);

这是lua代码:

function item:HookMe(objj)
    objj.name= "lalala"
end

该函数实际上被调用,但我不确定它是否正常工作...

将函数定义更改为:

function item.HookMe(objj)
    objj.name= "lalala"
end

原始定义中的冒号表示该函数也具有self参数。 这些函数被调用如下: object:HookMe() 但是你想直接调用它,所以冒号不适用。

编辑:
如果你想保持函数定义并保留self ,请像这样调用它:

lf.Call(null, obj);

要调用它也传递self对象:

lf.Call(lua["item"], obj);

似乎问题是Lua方法的设计(但它实际上取决于意图):

代替

function item:HookMe(objj)
    -- self not used
    objj.name= "lalala"
end

在给定的示例中,这将更好地工作:

function item:HookMe()
    self.name= "lalala"
end

的原因(在其他的答案,以及所讨论的)是声明与方法的语法的函数( : )增加了一个隐含的第一形式参数self 调用者可以传递任何东西作为第一个实际参数,但合同通常是传递函数的父表,以便它可以访问其兄弟字段。

在这种情况下, name似乎是HookMe的兄弟,因此该方法不应该在作为objj传递的任意表上运行,而是在self

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM