groovy789's blog

技術系備忘録φ(..)メモメモ

Scalaでプレースホルダの話

うーん。よくわからん(´・ω・`)

というわけでまとめてみた。

  1. 個別の値としての「_」
  • 引数が1個の場合
    val funcA1: (Int) => Int = (n: Int) => n + 1
    val funcA2: (Int) => Int = (n) => n + 1
    val funcA3: (Int) => Int = n => n + 1
    val funcA4: (Int) => Int = _ + 1
    // 引数が複数の場合
    val funcB1: (Int, Int) => Int = (a: Int, b: Int) => a + b
    val funcB2: (Int, Int) => Int = (a, b) => a + b
    // val funcB3: (Int, Int) => Int = a, b => a + b ⇒コンパイルエラー
    val funcB4: (Int, Int) => Int = _ + _
    // val funcB5: (Int, Int) => Int = _ ⇒コンパイルエラー

まとめると・・・

  • 型が推論できる
  • パラメータを順番通りにすべて使う

とき、「_」で代用できる( ..)φメモメモ

  1. 全体としての「_」
  • パラメータリスト全体の場合
    def funcC1(a: Int, b: Int, c: Int) = a + b + c
    val funcC2 = funcC1 _  //⇒funcC2.apply(a, b, c)と同じ意味
    val funcC3: (String) => Unit = println _
    val funcC4: (String) => Unit = println
    // val funcC5: (String, String) => Unit = println ⇒コンパイルエラー

引数が1個の時は「_」自体も省略できる。

  • パラメータリストの部分の場合
    val funcD1 = (a: Int, b: Int, c: Int) => a + b + c
    val funcD2 = funcD1(1, _: Int, 3)

以上(*´ω`*)