6

lua でより読みやすい書き込み方法はありますか。

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

私は決して k を使用していないので、ループ制御から外したいので、値を反復しているだけであることは明らかです。値のリストのみを提供するpairs()のような関数はありますか?

4

5 に答える 5

10

値を繰り返すだけの標準関数はありませんが、必要に応じて自分で書くことができます。これがそのようなイテレータです:

function values(t)
  local k, v
  return function()
    k, v = next(t, k)
    return v
  end
end

しかし、通常、人々pairsは最初の変数を使用して破棄します。この場合_、意図を明確に示すために、未使用の変数 (アンダースコア) に名前を付けるのが通例です。

于 2012-09-12T21:03:48.867 に答える
5

私は人々_がkやiの代わりに変数を使うのを見てきました。

于 2012-09-12T19:26:48.463 に答える
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()を使用するため、順番にトラバースすることは保証されません。

于 2012-09-13T01:57:00.577 に答える
0

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

したがって、アンダースコア(_)名は、未使用の変数の方が読みやすいと思います。

于 2013-02-19T09:52:16.047 に答える
0

それは本当にあなたのコーディングスタイルです。あなたがそれを読むことができ、それに一貫性があるなら、それは問題ではありません.

for i,c in ただし、私は「インデックス」を表す「i」と「子」を表す「c」を使用する傾向がありますが 、「値」を表す「v」も同様に機能します。また、インデックス変数を使用していない場合でも、それは良い習慣です。

あなたがするかもしれないもう一つのことは for n = 1, 10 、数字を扱うときです。しかし、繰り返しになりますが、それはコーディング スタイルであり、それが一貫している限り、優れているはずです。

于 2012-09-12T23:43:28.313 に答える