Lua初学者,数组

第2行代码的目的是什么?

local table = {["First"] = 1, ["Second"] = 2, ["Third"] = 3}

for key, value in pairs(table) do
    print(key)
end

结果为-------------

First
Second
Third

"for key, value in pairs(table) do print(key) "这一行的目的是什么?我想知道为什么这是必要的。

点赞
用户4984564
用户4984564

正如其他评论中所建议的那样,你应该真正从《Lua 程序设计》开始阅读。它将解释这个问题以及更多内容,并且如果你想学习 Lua ,它真的是一个完美的起点。

那么,它的作用是什么?

给定一个类似这样的表

local tab = {first = 1, second = 2, third = 3}

通常迭代表中所有键值对的方法如下:

for key, value in pairs(tab) do
  print(key .. ": " .. tostring(value))
end

这将循环遍历表中的三个值,如 first = 1second = 2 等。对于每对键值对,key 被设置为表的键,value 被设置为它的值。然后,它执行在 doend 之间的代码,并在这些变量设置后执行。

因此,上面的示例将打印以下内容:

first: 1
second: 2
third: 3

它是如何工作的?

这有点更复杂; 让我们首先看看 pairs 实际返回了什么:

> t = {}
> print(pairs(t))
function: 68f18400    table: 0066b1d8    nil

它返回的表是我们传入的相同表。

pairs 返回的函数是 next 函数,它给定一个表和一个键,在未知顺序但不重复键的情况下,返回表中的下一个键。

你可以在命令行上轻松确认这一点。

> print(t)
table: 0066b1d8
> print(next)
function: 68f18400

然后,Lua 将 for 循环转换为类似以下的内容:

do
  local f, state, iterator = next, tab, nil -- 这是由 pairs 返回的
  while true do
    local key, value = f(state, iterator)
    if key == nil then break end
    iterator = key
    print(key, value) -- 这是 for 循环的正文
  end
end
2019-02-05 08:31:47