gpt4 book ai didi

lua - 忽略 Lua 中的元表?

转载 作者:行者123 更新时间:2023-12-04 03:06:46 25 4
gpt4 key购买 nike

我正在开发一个 Lua 菜单,我得到了 Menu 类,它创建了这样的实例:

function Menu:new(label, action, open)
local inst = {
parent = self,
label = label,
action = action,
open = open or self.defaultOpenState,
current = false
}
setmetatable( inst, { __index = self } )
if self.subMenus then
table.insert( self.subMenus, inst )
else
self.subMenus = { inst }
end
return inst
end

这显然不是菜单的所有代码,但这足以解释我的问题。菜单工作正常,但是打印时却不行。问题是,我正在使用递归方法打印出所有子菜单,但它会一遍又一遍地打印第一个菜单。我知道是什么原因造成的,但不确定如何解决。这是代码:

function Menu:draw(indent)
local indent = indent or 0
if self.label then
if self.current then
print( string.rep( " ", indent ) .. self:getDirectoryMark() .. "<" .. self.label .. ">" )
else
print( string.rep( " ", indent ) .. self:getDirectoryMark() .. " " .. self.label )
end
end
if self.subMenus and self.open then
for k, v in ipairs( self.subMenus ) do
v:draw( indent + 1 )
end
end
end

问题是(我想是,如果我错了请纠正我?),在第 10 行 if self.subMenus ... 它总是正确的。总是有一个子菜单,即使没有,因为菜单 (self) 没有找到子菜单,它检查它的元表,它有子菜单,然后在第 11 行,它为它的元表子菜单执行 for 循环.这意味着,它会再次吸引自己。然后再次。然后再次。那么有没有办法在一个地方绕过元表呢?或者我是对的,重复打印是因为这个吗?

最佳答案

关于lua - 忽略 Lua 中的元表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9447983/

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