【发布时间】:2016-01-19 00:09:08
【问题描述】:
我正在尝试使用 golua package 为我用 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
我的问题
- 如何创建与A Simplified Way to Declare Lua Classes 中描述的类等效的 lua 类?
- 如何将“魔术方法”添加到
__tostringhere 等类中
【问题讨论】: