作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有一个函数可以迭代用户数据值中的条目?我试图列出某个用户数据变量中的每个字段及其值,就像 pairs
所做的那样:
local function list_entries ( obj )
for k, v in pairs ( obj ) do
print ( k .. ": " .. tostring ( v ) )
end
end
pairs
不适用于用户数据,那么有解决方案吗?
最佳答案
Lua 5.2+提供了__pairs
和__ipairs
元方法。如果用户数据提供了它们,那么相应的Lua迭代器将调用它们来获取迭代数据。这意味着用户数据必须明确选择提供迭代支持;不能强制它。
毕竟,userdata 实际上并不包含任何内容(至少就 Lua 而言)。它的所有 Lua 功能都来自它提供的元方法。 data.val
之所以有效,是因为用户数据有一个 __index
元方法,可以接受字符串 "val"
。迭代也不异常(exception);如果用户数据没有提供,则无法执行此操作。
在早期版本的 Lua 中,您可以将现有的pairs 和 ipairs 函数替换为 5.2+ 版本所做的功能:查找元方法并使用它们如果有的话。当然,这只能通过 C 来完成,因为只有 C 代码才能获取用户数据的元表。
关于lua - 有没有一种方法可以迭代用户数据,就像对和 ipairs 对表所做的那样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43689320/
我是一名优秀的程序员,十分优秀!