kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Ruby(1.8)のブロック付きメソッド -> Scalaの高階関数対応表(Enumerable編)

RubyのリファレンスマニュアルのEnumerableの所を読みながら即興で作ったもので、たぶん抜けや間違いなどあると思いますので、ご指摘いただければ幸いです。あと、ScalaにあってRubyに無い高階関数については書いてません。

Ruby Scala
Enumerable#all? Iterable#forall
Enumerable#any? Iterable#exists
Enumerable#collect,map Iterable#map
Enumerable#each Iterable#foreach
Enumerable#each_with_index なし(List#zipWithIndexを使うことで同様のことは可能)
Enumerable#find,detect Iterable#find
Enumerable#find_all,select Iterable#filter
Enumerable#grep なし
Enumerable#inject Iterable#foldLeft
Enumerable#max Iterable.max
Enumerable#min Iterable.min
Enumerable#partition Iterable#partition
Enumerable#reject List#remove
Enumerable#sort List#sort,scala.util.Sortingの各種メソッド
Enumerable#sort_by scala.util.Sorting#stableSort[K, M](a : Seq[K], f : (K) => M)(implicit view$4 : (M) => Ordered[M])

補足:Scalaのコレクションクラスは、RubyにおけるEnumerableと同様に、ほぼ全てがIterableを直接・間接に継承しているため(Javaの場合と違い、Mapも含めて)、Iterableにあるこれらの高階関数は、大抵のコレクションクラスで問題無く使うことができます。

補足2:ohacさんからツッコミ

Iterable.max(List(1,2,3)) みたいなこともできますよね。
補足に追記しておいて頂けるとうれしいです。

がありましたので、表に追記しておきました。