Scalaのforeachはパターンマッチで書けるのね
val hoge = List(1, 3, 5, 7)
こんなリストがあるとして
順番に要素を出力してみよう。
👻例1
foreach
を使うと
hoge.foreach(h => { println(h) })
こうなる。
👻例2
これをパターンマッチと再帰的なサムシンでも書けるっぽい。
@tailrec def f(hoge: List[Int]): List[Int] = { hoge match { case h :: fuga => println(h) f(fuga) case _ => List.empty[Int] } }
f(hoge)
を呼び出せば例1と同じになる。
何故急にこんなことを書いてみたかというと、
例2にあるcase h :: fuga =>
の意味が分かった記念。
最初::
が要素追加かと思って何をしているのか理解できんかったけど、リストを順番に処理しているのね。
ちなみにここでの再帰処理を図におこすとこんな感じだと思う!
Scalaのパターンマッチはとにかく強いらしい…?