gpt4 book ai didi

lua - 为什么这在 Lua 中有效? - for k, v in next, t, nil do print(k, v) end

转载 作者:行者123 更新时间:2023-12-02 07:41:38 24 4
gpt4 key购买 nike

我就是无法理解这个工作 Lua 片段。

这个:

t = {'a', 'b', 'c'}
for k, v in next, t, nil do
print(k, v)
end

返回:

1   a
2 b
3 c

谁能解释一下

  • 如何 next获取 t 作为其参数?
  • t 如何成为 for 的有效 to 参数
  • 为什么需要 nil 并被接受为有效步骤?

最佳答案

对其他答案进行一些扩展:

“通用 for 循环”中涉及的值的更具描述性的命名如下:

for k, v1, v2, … in f_step, state, k0 do  …  end

它会像这样循环

k,v1,v2,…=f_step(state,k0) ; if k==nil then break end ; k0=k ; --(…for body here…)
k,v1,v2,…=f_step(state,k0) ; if k==nil then break end ; k0=k ; --(…for body here…)
k,v1,v2,…=f_step(state,k0) ; if k==nil then break end ; k0=k ; --(…for body here…)

并且 f_step 可以以任何它喜欢的方式自由修改 state (尽管 pairs/next 不这样做,而且到目前为止另一个例子,string.gmatch甚至完全忽略statek并将所有变化的状态保留在闭包中(如果您还不知道该术语,请考虑“函数”。)

<小时/>

现在,pairs 所做的本质上就是

function pairs( t )
-- (__pairs logic goes here, omitted for brevity)
return next, t, nil
end

和常见的

for k, v in pairs( t ) do  …  end

本质上扩展到

for k, v in next, t, nil do  …  end

(除非 t 具有带有 __pairs 的元表。)

现在,您可能会显式编写 next, t, nil 而不是 pairs,原因有两个 - 让还不知道这一点的人感到困惑,或者避免触发__pairs。 (为了避免触发 __index/__newindex,您可以使用 rawget/rawset,以避免 __pairs code>,您显式编写 next, t, nil。或者您可能定义 function rawpairs( t ) return next, t, nil end 并使用它...)

关于lua - 为什么这在 Lua 中有效? - for k, v in next, t, nil do print(k, v) end,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42305188/

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