lua中是否有更易读的方式来编写:
for k, v in pairs(my_table) do
myfunction( v )
end
我从不使用 k,所以我想把它从循环控制中取出,所以很明显我只是在迭代这些值。有没有像pairs() 这样的函数只给我一个值列表?
lua中是否有更易读的方式来编写:
for k, v in pairs(my_table) do
myfunction( v )
end
我从不使用 k,所以我想把它从循环控制中取出,所以很明显我只是在迭代这些值。有没有像pairs() 这样的函数只给我一个值列表?
没有仅迭代值的标准函数,但如果您愿意,可以自己编写。这是这样一个迭代器:
function values(t)
local k, v
return function()
k, v = next(t, k)
return v
end
end
但通常人们只是使用pairs
和丢弃第一个变量。在这种情况下,习惯上命名未使用的变量_
(下划线)以清楚地表明意图。
我见过人们使用_
变量而不是 k 或 i。
如果您不想要您正在枚举的表的键/值对,为什么要使用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 的值。与pairs()一样,由于它使用next(),因此不能保证按顺序遍历。
这是你的编码风格,真的。如果您可以阅读它并且与它保持一致,那么这无关紧要。
但是,我倾向于使用:
for i,c in
“i”代表“index”,“c”代表“child”,但“v”代表“value”也可以。即使您不使用索引变量,这仍然是一种很好的做法。
您可能会做的另一件事是:
for n = 1, 10
处理数字时。但再一次,这是你的编码风格,只要它是一致的,你就应该是好的。
来自Lua 风格指南:
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).
所以我希望下划线 ( _
) 名称对于未使用的变量更具可读性。