将Go Struct实例转换为Lua表

时间:2019-03-22 20:14:17

标签: go lua lua-table lua-userdata

我有一个Go Struct的实例,并且想使用GopherLua将实例传递给Lua方法。

我的Go代码如下:

dog := new(Animal)

runParam := lua.P{
    Fn:      L.GetGlobal("run"),
    NRet:    1,
    Protect: true,
}

mt := luar.MT(context.AppContext.LuaVM, dog)
userData := &lua.LTable{Metatable: *mt}
userData.Append(&lua.LUserData{Value: dog, Metatable: mt, Env: mt.LTable})

err = L.CallByParam(runParam, lua.LString("One"), userData)
if err != nil {
    fmt.Println("Error while calling lua method: " + err.Error())
}

在我的Lua方法中,访问Animal参数的属性会导致错误试图为非表对象建立索引。我的Lua像这样:

function run(newName, ent) {
    print(ent.Name)
}

请问我在做什么错?传递其他类型的参数(字符串,整数)可以正常工作。

1 个答案:

答案 0 :(得分:0)

这里有一个完整的示例,说明如何访问文档中的结构成员:https://github.com/yuin/gopher-lua#user-defined-types