1. ホーム
  2. lua

[解決済み] 何をするのか? for i=1,select('#',...)

2022-02-14 10:40:28

質問

あるプロジェクトで次のようなコードに遭遇したのですが、for-loopの繰り返し部分がよくわかりません。select()関数とは何ですか?

function _log (str,...)
  local LOG="/tmp/log.web"
  for i=1,select('#',...) do
    str= str.."\t"..tostring( select(i,...) )
  end
os.execute("echo \"".. str .."\" \>\> " .. LOG )
end

解決方法は?

からの Luaマニュアル :

もし index が数値の場合、引数番号index以降の全ての引数を返します。 そうでなければ,indexは文字列でなければならない。 "#" そして、selectは受け取った余分な引数の総数を返します。

この記事から Luaの複数引数と"select"関数 必要であれば、表形式に変換することもできます。

function multiple_args(...)
  local arguments = {...}  -- pack the arguments in a table
  -- do something --
  return unpack(arguments) -- return multiple arguments from a table (unpack)
end

最後に、インデックスとして "#" を渡すと、この関数は与えられた複数の引数のカウントを返します。

print(select("#")) --> 0
print(select("#", {1, 2, 3})) --> 1 (single table as argument)
print(select("#", 1, 2, 3)) --> 3
print(select("#", {1,2,3}, 4, 5, {6,7,8}) --> 4 (a table, 2 numbers, another table)