gpt4 book ai didi

golua - 使用已定义的方法声明 lua 类

转载 作者:IT王子 更新时间:2023-10-29 02:15:08 26 4
gpt4 key购买 nike

我正在尝试使用 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

我的问题

  1. 如何创建等同于 A Simplified Way to Declare Lua Classes 中描述的 lua 类?
  2. 如何向__tostring 这样的类添加“魔术方法”here

最佳答案

我没有用过 go,但看起来您从未将 Book 设置为您创建的新书的元表。我非常确定这不会自动发生。

查看我在此处找到的示例 https://github.com/stevedonovan/luar/blob/master/luar.go#L52

这里重要的是,当创建用户数据或任何对象(您的书)时,您需要获取全局元表,然后使用 L.SetMetaTable(-2) 将其设置为元表

关于golua - 使用已定义的方法声明 lua 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34841773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com