[英]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.