はじめに こんばんは! 突然ですが、 Scala における fold と foldLeft はほとんど同じものだ!と思っていませんか? また、Scala の Option#fold メソッドを使って、何か不自然に思ったことはありませんか? 先に結論を述べますと、 fold メソッドと foldLeft メソッドは異なります(もちろん foldRight とも違いますよ!)。 「ちょっとだけ挙動に差が…」的な違いではなく、根本的に違います。 たまたま、 List#fold と List#foldLeft が(例外的に)似たような定義で、かつ(例外的に)似たような挙動をするため、誤った通説(全てのfold≒foldLeft)があったりなかったりするようです。少なくとも僕は、Scala を書くようになってからある一定の期間、全ての fold と foldLeft は同じものだと考えていました。
Scalaユーザの皆様は、普段からコレクションライブラリの高階関数を使われていることと思います。特に、mapやflatMapは必須の高階関数といっても良いでしょう。 さて、話は少し変わりますが、Scala 2.8以降のコレクションライブラリでは、map,flatMapなどに対して、implicitな引数 bf: CanBuildFrom がくっついています。たとえば、List[+A]#mapのシグニチャは def map[B, That] (f: (A) ⇒ B)(implicit bf: CanBuildFrom[List[A], B, That]): That となっています。ここで、通常のケースではimplicit paramater bfの存在を意識しなくても意図通りに動作するようにmapメソッド(正確には、意図通りにmap メソッドが動作するように、bfに対して適切なCanBui
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く