有没有更可读的方式来写k,成对的v(my_table)do ...如果我从不使用k,则以lua结束?

时间:2012-09-12 19:20:36

标签: coding-style lua

在lua中有更可读的方式来写:

for k, v in pairs(my_table) do
    myfunction( v )
end 

我从不使用k,所以我想把它从循环控制中取出来,所以我很清楚我只是迭代这些值。有没有像pairs()这样的函数只给出一个值列表?

5 个答案:

答案 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)

来自Lua Style Guide

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).

所以我希望下划线(_)名称对于未使用的变量更具可读性。