Преобразование экземпляра Go Struct в таблицу Lua - PullRequest
0 голосов
/ 22 марта 2019

У меня есть экземпляр Go Struct, и я хотел бы передать его в метод Lua, используя GopherLua.

Мой код 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 выдается ошибка попытка проиндексировать объект не из таблицы . Мой Луа выглядит так:

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

Пожалуйста, что я делаю не так? Передача другого типа (string, int) параметра работает нормально.

1 Ответ

0 голосов
/ 23 марта 2019

Здесь у вас есть полный пример доступа к членам структуры в документации: https://github.com/yuin/gopher-lua#user-defined-types

...