是否有一个函数可以迭代用户数据值中的条目?我试图列出某个用户数据变量中的每个字段及其值,就像这样pairs做:
local function list_entries ( obj )
for k, v in pairs ( obj ) do
print ( k .. ": " .. tostring ( v ) )
end
end
Run Code Online (Sandbox Code Playgroud)
pairs不适用于用户数据,那么有解决方案吗?
Lua 5.2+ 提供了__pairs和__ipairs元方法。如果用户数据提供了它们,那么相应的Lua迭代器将调用它们来获取迭代数据。这意味着用户数据必须明确选择提供迭代支持;它不能被强迫。
毕竟,userdata 实际上并不包含任何内容(至少就 Lua 而言)。它的所有 Lua 功能都来自它提供的元方法。data.val仅仅因为 userdata 有一个__index可以接受 string 的元方法才有效"val"。迭代也不例外;如果用户数据不提供,则无法执行此操作。
在早期版本的 Lua 中,您可以用5.2+ 版本所做的事情替换现有的pairs和函数:查找元方法并使用它们(如果可用)。ipairs当然,这只能通过 C 来完成,因为只有 C 代码才能获取用户数据的元表。
| 归档时间: |
|
| 查看次数: |
3738 次 |
| 最近记录: |