Luaプログラム設計変長パラメータ


Luaの関数はまた、異なる数の実パラメータを受け入れることができる.たとえば、printを呼び出すと、1つ、2つまたは複数の実パラメータが入力されます.
function add(...)
local s = 0
  for i, v in ipairs{...} do   --> {...}                 
    s = s + v
  end
  return s
end
print(add(3,4,5,6,7))  --->25

パラメータの3点(...)この関数が異なる数の実パラメータを受け入れることができることを示します.この関数が呼び出されると、そのすべてのパラメータが収集され、この部分で収集された実パラメータはこの関数の「長くなるパラメータ」と呼ばれます.
1つの関数が彼の変長パラメータにアクセスするには、3つのポイント(...)が必要です.ただし、このときの3点を1つの式として使用します(上記).式「...」の動作は、現在の関数のすべての変長パラメータを返す複数の戻り値を持つ関数に似ています.
function fwrite(fmt, ...)  --->3          fmt。                          ,                。
                                lua             ,       (     )      。
 return io.write(string.format(fmt, ...))   
end 

fwrite()  --->fmt = nil,      。
fwrite("a")   --->fmt = "a",      。
fwrite("%d%d", 4, 5) ---->fmt = "%d%d",    = 4   5

通常、1つの関数は、その変長パラメータを巡回する際に式{...}を使用するだけで、これはtableにアクセスするように、すべての長くなるパラメータにアクセスします.
関数selectは、変長関数にnil値がある場合にアクセスします.
selectを呼び出す場合は、固定された実パラメータselectorと一連の変長パラメータを入力する必要があります.selectorが数値nの場合、selectはn番目の可変実パラメータを返します.そうでない場合、selectorは文字列「#」のみであり、selectは長くなるパラメータの合計数を返します.
for i =1 ,select("#", ...) do
  local arg = select(i, ...)  --->   i            。
    <   >
end