scala初心者でfoldがよくわからなかったので調べてまとめたからメモ
foldには値がNone
だったときのデフォルト値を入れとくみたいなイメージ
そんでその後に値があるときの処理をする
定義
def fold[B](ifEmpty: ⇒ B)(f: (A) ⇒ B): B
- 第一引数 (ifEmpty: => B) は、 None に対応する関数です。
- 第二引数 (f: (A) => B) は、 Some(A) に対応する関数です。
こんな感じ
こういう関数があって↓
val message = maybeMoney.fold("お金もってないよ!") { money =>
s"${money}円持ってるお"
}
値があるとき
scala> val oyatsu: Option[Int] = Some(1000)
oyatsu: Option[Int] = Some(1000)
scala> val message = oyatsu.fold("おやつは持ってきちゃダメ!") { money =>
| s"おやつは${money}円までです"
| }
message: String = おやつは1000円までです
値がないとき
scala> val oyatsu: Option[Int] = None
oyatsu: Option[Int] = None
scala> val message = oyatsu.fold("おやつは持ってきちゃダメ!") { money =>
| s"おやつは${money}円までです"
| }
message: String = おやつは持ってきちゃダメ!
なるほど