新しいindexのまとめ
ver0.6.2から変わりました。
.{n}はindex_safe。アクセス不可の場合にNilを返す。index(.[])はエラーになる。Mapの場合はindexは新しくmappingするが、index_safeはしない。
{0 1 2}.{1} //1 {0 1 2}.{3} //Nil {0 1 2}.{-1} //2 {0 1 2}.{-3} //Nil
.{n} = vはindex_set_safe。アクセス不可の場合にvを詰める。マイナス値が与えられた場合、前部を詰め、それらしく機能する。
a: {0 1} a.{1} = 3 a//{0 3} a: {0 1} a.{3} = 3 a//{0 1 3 3} a: {0 1} a.{-2} = 3 a//{3 1} a: {0 1} a.{-3} = 3 a//{3 0 1}
Object.?が条件値をキャストするようになったので、n.< self.size.?とやっていたのを、簡易にself.{n}.?やself.{n}.nil?.?とできるようになった。当然、self.{n}がfalseの場合や、Nilの場合にはアクセス不可時との区別は付かない。簡潔なほど曖昧になる。
{}.{0}.? true //Nil {Nil}.{0}.? true //Nil {0}.{0}.? true //0 {1}.{0}.? true //1 {}.{0}.nil?.? true //true {Nil}.{0}.nil?.? true //true {0}.{0}.nil?.? true //false {1}.{0}.nil?.? true //false
.{n len}はslice_safeになるが、sliceのシノニム。slice, slice_safeについては別項(v0.6.5)
以下、safeに限らないこと。
.[Range]は、.slice(Range.begin Range.end.- (Range.begin))と扱われる。Range.endがマイナスの場合は.slice(Range.begin Range.end)
{0 1 2 3}.{2 2} //{2 3} {0 1 2 3}.{2...4} //{2 3} {0 1 2}.{1...2} //{1} {0 1 2}.{0...-1} //{0 1} {0 1 2}.{0..-1} //{} //0..-1は0...0になる
sliceにNilはself.sizeとして扱われる。
{0 1 2 3}.{1 Nil} //{1 2 3} {0 1 2 3}.{Nil Nil} //{}
.[a.@]も可能になった。引数が1つならindex, 複数ならsliceに動的(非パース時)になる。