ArrayとIterator

配列の要素巡回には次のような方法があります。
普通にfor文で

 for(i : 0; i<ary.length; ++i){
   println(i);
 }

Iterator文で

 ary.each{ // Array::eachは要素を巡回できるIteratorを返す。
   println(it);
 }

下のは次のように、eachを省いても書けるようになりました。

 ary{
   println(it);
 }

これにより、あるメソッドが、戻り値としてIteratorを返すか、配列を返すかに関わらず{}を適用できるようになりました。

 foo.hoge{ // 以前は配列を返す場合は foo.foge.each{ とする必要があった。
   println(it);
 }

Xtalでは次のルールを設けます。
「配列を返すメソッドや関数は、将来的にIteratorを返す仕様にしても良い。その逆に現在Iteratorを返すメソッドや関数は、将来的に配列を返す仕様にしても良い」

よって、確実に配列として欲しい場合、to_aを呼び出す必要があります。
Iterator::to_aは各要素を集めた配列を生成して返し、Array::to_aは自分自身を返します。

 foo.hoge.to_a;