在lua中有更可读的方式来写:
for k, v in pairs(my_table) do
myfunction( v )
end
我从不使用k,所以我想把它从循环控制中取出来,所以我很清楚我只是迭代这些值。有没有像pairs()这样的函数只给出一个值列表?
答案 0 :(得分:10)
没有标准函数只迭代值,但如果您愿意,可以自己编写。这是一个迭代器:
function values(t)
local k, v
return function()
k, v = next(t, k)
return v
end
end
但通常人们只使用pairs
并丢弃第一个变量。在这种情况下,习惯上将未使用的变量命名为_
(下划线)以清楚地表明意图。
答案 1 :(得分:5)
我见过人们使用_
变量而不是k或i。
答案 2 :(得分:1)
如果你不想要枚举表的键/值对,为什么要使用pairs()函数呢?
例如,输入时间更短:local t = {"asdf", "sdfg", "dfgh"}
for i=1, #t do
print(t[i])
end
否则,我总是这样做:
local t = {"asdf", "sdfg", "dfgh"}
for _,v in pairs(t) do
print(v)
end
编辑:对于您的场景,您只想枚举具有非数字键的表中的值,您可以做的最清楚的事情就是编写自己的表迭代器函数,如下所示:
local t = {["asdf"] = 1, ["sdfg"] = 2, ["dfgh"] = 3}
function values(tbl)
local key = nil
return function()
key = next(tbl, key)
return tbl[key]
end
end
for value in values(t) do
print(value)
end
然后,非常明确地说您只是遍历表t的值。就像pair()一样,这不能保证按顺序遍历,因为它使用next()。
答案 3 :(得分:0)
这是你的编码风格,真的。如果你能阅读它并且你与它一致,那么它应该没关系。
但是,我倾向于使用:
for i,c in
“我”代表“索引”和“c”代表“孩子”,但“v”代表“价值”也有效。即使你没有使用索引变量,它仍然是很好的做法。
您可能会做的另一件事是:
for n = 1, 10
在处理数字时。但是,再次,这是你的编码风格,只要它是一致的,你应该是好的。
答案 4 :(得分:0)
The variable consisting of only an underscore "_" is commonly used as a placeholder when you want to ignore the variable:
for _,v in ipairs(t) do print(v) end
Note: This resembles the use of "_" in Haskell, Erlang, Ocaml, and Prolog languages, where "_" takes the special meaning of anonymous (ignored) variables in pattern matches. In Lua, "_" is only a convention with no inherent special meaning though. Semantic editors that normally flag unused variables may avoid doing so for variables named "_" (e.g. LuaInspect is such a case).
所以我希望下划线(_
)名称对于未使用的变量更具可读性。