我正在尝试使用golua 包为我用 Go 编写的应用程序构建扩展 API。我的想法是让几个类暴露给 lua VM,例如Book类:
local book = Book.Create("Le Petit Prince")
print(book)
book:save()
我现在能做的只是基本的:
type Book struct {
Id int64
Title string
}
func BookCreate(L *lua.State) int {
title := L.ToString(1)
p := &Book{Id: 1, Title: title}
L.PushGoStruct(p)
return 1
}
func BookToString(L *lua.State) int {
book, _ := L.ToGoStruct(1).(*Book)
L.PushString(fmt.Sprintf("Book(Id=%d, Title=\"%s\")", book.Id, book.Title))
return 1
}
L := lua.NewState()
defer L.Close()
L.OpenLibs()
L.NewMetaTable("Book")
L.SetMetaMethod("Create", BookCreate)
L.SetMetaMethod("tostring", BookToString)
L.SetGlobal("Book")
这让我可以这样做:
local book = Book.Create("Le Petit Prince")
print(Book.tostring(book))
但不是这个:
local book = Book.Create("Le Petit Prince")
print(book:tostring())
// reflect: call of reflect.Value.Type on zero Value
我的问题
如何创建相当于声明 Lua 类的简化方法中描述的lua 类?
如何将“魔法方法”添加到类像__tostring 这里
青春有我
茅侃侃
相关分类