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の値のみをトラバースしていることは非常に明白です。pair()と同様に、next()を使用するため、順番にトラバースすることは保証されません。
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).
したがって、アンダースコア(_
)名は、未使用の変数の方が読みやすいと思います。
それは本当にあなたのコーディングスタイルです。あなたがそれを読むことができ、それに一貫性があるなら、それは問題ではありません.
for i,c in
ただし、私は「インデックス」を表す「i」と「子」を表す「c」を使用する傾向がありますが
、「値」を表す「v」も同様に機能します。また、インデックス変数を使用していない場合でも、それは良い習慣です。
あなたがするかもしれないもう一つのことは
for n = 1, 10
、数字を扱うときです。しかし、繰り返しになりますが、それはコーディング スタイルであり、それが一貫している限り、優れているはずです。