Scalaでプレースホルダの話
うーん。よくわからん(´・ω・`)
というわけでまとめてみた。
- 個別の値としての「_」
- 引数が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 = _ ⇒コンパイルエラー
まとめると・・・
- 型が推論できる
- パラメータを順番通りにすべて使う
とき、「_」で代用できる( ..)φメモメモ
- 全体としての「_」
- パラメータリスト全体の場合
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)
以上(*´ω`*)