簡體   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