読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

Scalaで空のListにはreduceLeft()ではなくreduceLeftOption()を使用する

要素が存在するListにはreduceLeft()で問題ない。

List(123, 234, 345).reduceLeft{ (a, b) => a + b }
//=> 702

でも要素が空っぽだと、エラーになる。

List[Int]().reduceLeft{ (a, b) => a + b }
// java.lang.UnsupportedOperationException: empty.reduceLeft

ググったらreduceLeftOption()なるものでOptionで包んで返してくれるので、これを使うようだ。

List[Int]().reduceLeftOption{ (a, b) => a + b }
//=> Option[Int] = None

List[Int]().reduceLeftOption{ (a, b) => a + b }.getOrElse(0)
//=> 0

List(123, 234, 345).reduceLeftOption{ (a, b) => a + b }
// Some(702)

List(123, 234, 345).reduceLeftOption{ (a, b) => a + b }.getOrElse(0)
// 702

ちなみに、この例のように、要素の値の和を出すためのメソッドのsum()がListにはあるけど、こちらも要素が空っぽだとエラーになるので、reduceLeftOption()を使うか、foldLeft()を使うとエラーにならないらしい(なぜだ)。



参考