如何解决Lua-重复执行,直到递归表除“试图索引零值”以外
好吧,我会举一个例子
我想这样做:
local x = {}
repeat
-- wait function
until x.lel.ciao
但是我有这个错误:
input:3: attempt to index a nil value (field 'lel')
所以我可以这样做:
local x = {}
repeat
-- wait function
until x.lel and x.lel.ciao
但是如果我的路很长,我该怎么办?
喜欢 :
x.lel.ciao.value1.title1.text1
我不想做:
local x = {}
repeat
-- wait function
until x.lel and x.lel.ciao and x.lel.ciao.value1 and x.lel.ciao.value1.title1 and x.lel.ciao.value1.title1.text1
有人有主意吗?就像函数safepath(x.lel.ciao.value1.title1.text1)
解决方法
就像Egor的评论(感谢Egor)一样,debug.setmetatable
允许您为对象类型(不是对象实例)设置一个元表。
这是一个问题,
该类型的所有对象也将继承该可移植对象。
这意味着,您将遇到使代码难以调试的问题,因为从nil值中获得这种反馈绝对重要。
以以下代码为例:
debug.setmetatable(nil,{ __index = {} })
repeat
. . . -- Your code goes here
until x.lel.ciao.value1.title1.text1
function getFrom(data,value)
return date[value]
end
. . . -- More code
从这种简单的作用域角度来看,您可能会很快看到问题,但可以想象此代码被成千上万的行和函数所掩盖。
您最终会陷入疯狂,因为它只会返回nil,这根本不应该发生,因为,您确定您的data
变量具有这样的值,对吗?
为了避免此类事情的发生,您应该安全地这样做:
debug.setmetatable(nil,{ __index = {} })
repeat
. . . -- Your code goes here
until x.lel.ciao.value1.title1.text1
debug.setmetatable(nil,nil)
根据Lua参考,将一个元表设置为nil会删除该元表,这样,您在重复循环内运行时,只会暂时忽略来自nil
的反馈。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。