多値返却

Luaは関数で複数の値を返すことができるけどそれをテーブルに突っ込んだらどうなるのかテスト。

function test()
  return 1,2,3
end

t = { test(), test(), test() }

for i,v in pairs(t) do
  print(v)
end

出力

1
1
1
2
3


一応多値は展開されてるけど、展開される位置がパース時のインデクスになってしまうっぽいね。
多値を含めてパースするのは確かに難しい気がするけどこれは困る。なんとかいい方法はないかなぁ。


何がやりたいのかというと

postbl = { pos(1), pos(2), pos(3) }

みたいに位置群をリストに静的に展開したいのです。

postbl = { [1]=pos(1), [4]=pos(2), [7]=pos(3) }

ってやるしかないんかな。


試したら多値が展開されなくなっちゃった。。
難しい。

もし最後のフィールドが exp 形式で、その式が関数呼び出しか可変引数式であれば、その戻り値
がすべてリストに追加される (2.5.8 を参照)。これを避けるには、関数呼び出し(あるいは可変引
数式)をカッコで囲む (2.5 を参照)。 

逆はないんかw
多値を明示的に展開するには多値を一旦テーブルに入れて、テーブルを展開する関数を作ったりしないとだめかもなぁ。

postbl ={ {pos(1)},{pos(2)},{pos(3)}, }
postbl = table.flatten( postbl )

flattenは自作しないとだめだけどw