ContainerのC++のSTLのalgorithm系メソッドについて
- func(begin, end, ...)は、func(self.begin, self.end, ...)となる
- 破壊的なものは!が後置、それの付かない版はコピーを返す
- ArrayやMapの値は置き換え(self.[index] = value)でなく書き換え(self.[index].= value)になる
- for_eachはeachがあるので無し。eachはcontinue, breakをサポートする
- transformはmapがあるので無し。mapはcontinue, breakをサポートする
- removeは勝手にeraseする
- copyはObject.copyと名前が衝突するのでcopy_intoになってる
- C++で_ifが後置するものがある関数は常に_ifの方を呼ぶ
Giraffe+ 0.6.22.1208 から、Object.invokeに引数を渡した場合に==を呼ぶようになり、これにより、普通のオブジェクトを高階関数にpredicateとして渡せるようになりました。
例えばString.trimでは、
'1234321'.trim(\1) //23432
とできるようになりました。
これに伴い、C++のSTLの関数は全て_ifの方を使えばいいということで、そうしたんですが、x == yとなってたのが、y == xとなり、問題のある場面があります。
例えばfindでは、
s:: '2' s.as_Int: s.to_Int$ //Int.== が自動的に呼ぶ {1 2 3}.find(s) //以前なら1.== sだが、今はs.== 1なのでエラー。 {1 2 3}.find(`n[n.== s]) //以前と同じ
ということになります。こういう特殊なことをしてない限りは問題無いはずです。