Lua中__pairs函数究竟是如何实现的?

2026-04-01 20:071阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计243个文字,预计阅读时间需要1分钟。

Lua中__pairs函数究竟是如何实现的?

有没人知道lua 5.2的实际实现.+ metamethod+ __pairs?如何在内表中实现__pairs作为metamethod,以便它与pairs()完全相同?我需要覆盖__pairs并想跳过我在表中添加的一些虚拟变量.+以下:

lua-- 假设有一个metatablelocal mt={ __pairs=function(t) end }

Lua中__pairs函数究竟是如何实现的?

-- 创建一个表并设置metatablelocal myTable={}setmetatable(myTable, mt)

-- 向表中添加一些虚拟变量myTable.key1=value1myTable.key2=value2myTable.__pairs=should be overridden

-- 尝试使用pairsfor k, v in pairs(myTable) do print(k, v)end

有没有人知道lua 5.2的实际实现. metamethod __pairs?换句话说,如何在metatable中实现__pairs作为metamethod,以便它与pairs()完全相同?

我需要覆盖__pairs并想跳过我在表中添加的一些虚拟变量.

以下将使用metatable元明确提供对默认行为:

function meta.__pairs(t) return next, t, nil end

现在,为了跳过特定元素,我们必须替换返回的下一个:

function meta.__pairs(t) return function(t, k) local v repeat k, v = next(t, k) until k == nil or theseok(t, k, v) return k, v end, t, nil end

供参考:Lua 5.2 manual, pairs

本文共计243个文字,预计阅读时间需要1分钟。

Lua中__pairs函数究竟是如何实现的?

有没人知道lua 5.2的实际实现.+ metamethod+ __pairs?如何在内表中实现__pairs作为metamethod,以便它与pairs()完全相同?我需要覆盖__pairs并想跳过我在表中添加的一些虚拟变量.+以下:

lua-- 假设有一个metatablelocal mt={ __pairs=function(t) end }

Lua中__pairs函数究竟是如何实现的?

-- 创建一个表并设置metatablelocal myTable={}setmetatable(myTable, mt)

-- 向表中添加一些虚拟变量myTable.key1=value1myTable.key2=value2myTable.__pairs=should be overridden

-- 尝试使用pairsfor k, v in pairs(myTable) do print(k, v)end

有没有人知道lua 5.2的实际实现. metamethod __pairs?换句话说,如何在metatable中实现__pairs作为metamethod,以便它与pairs()完全相同?

我需要覆盖__pairs并想跳过我在表中添加的一些虚拟变量.

以下将使用metatable元明确提供对默认行为:

function meta.__pairs(t) return next, t, nil end

现在,为了跳过特定元素,我们必须替换返回的下一个:

function meta.__pairs(t) return function(t, k) local v repeat k, v = next(t, k) until k == nil or theseok(t, k, v) return k, v end, t, nil end

供参考:Lua 5.2 manual, pairs