多値です。
関数型言語に良くあるタプルみたいなものを想像していただければわかりやすいかと。
,で区切った列が多値として認識されます。なお、配列とは似てるけど違うので注意。
(1, 2, 3, 4, 5).p;
左辺と右辺の値の数が異なるときは、特殊な動作をします。
左辺の方が多いとき、足りない分はundefinedで埋められ、左辺の方が少ないとき、余分な分は左辺の最後の変数に多値として格納されます。
a, b, c : 1, 2; a.p; b.p; c.p; a, b = 1, 2, 3, 4; a.p; b.p;
関数の戻り値として使うのが便利だと思います。
// 実際はC++からバインドする // テクスチャインスタンス, 横幅, 縦幅 の多値を返す fun lib::CreateTexture(filename){ return "This is Texture of "~filename, 512, 512; } tex, texw, texh : lib::CreateTexture("foo.png"); tex.p; texw.p; texh.p; tex2, tex2size : lib::CreateTexture("bar.png"); tex2.p; tex2size.p;
なお、C++で多値を返したい場合は、関数のreturnを使うのではなく、return_resultを呼び出す必要があります。
# Values返してもダメなのかな?
// 戻り値はvoidで良い void CreateTexture(const xtal::StringPtr& filename){ xtal::vmachine()->return_result(xtal::xnew<String>("This is Texture of ")->cat(filename), 512, 512); }
上の方法だと4つまでしか返せないので、もっと返したい場合は、自分でValuesPtrを作ってreturn_result_mvを呼び出す必要があります。
void Return6Values(){ using namespace xtal; vmachine()->return_result_mv( xnew<Values>(0, xnew<Values>(1, xnew<Values>(2, xnew<Values>(3, xnew<Values>(4, xnew<Values>(5))))))); }