5

私が行った場合:

val l = Seq(("un", ""), ("deux", "hehe"), ("trois", "lol"))
l map { t => t._1 + t._2 }

大丈夫です。

私が行った場合:

val l = Seq(("un", ""), ("deux", "hehe"), ("trois", "lol"))
l map { case (b, n) => b + n }

それも大丈夫です。

しかし、もしそうなら:

val l = Seq(("un", ""), ("deux", "hehe"), ("trois", "lol"))
l map { (b, n) => b + n }

効果がないでしょう。
名前付きタプルを使用するために「case」キーワードを使用する必要があるのはなぜですか?

4

3 に答える 3

8

2.11 のエラー メッセージは、より説明的です。

scala> l map { (b, n) => b + n }
<console>:9: error: missing parameter type
Note: The expected type requires a one-argument function accepting a 2-Tuple.
      Consider a pattern matching anonymous function, `{ case (b, n) =>  ... }`
              l map { (b, n) => b + n }
                       ^
<console>:9: error: missing parameter type
              l map { (b, n) => b + n }
                          ^

適用の場合、「自動タプリング」を取得します。

scala> def f(p: (Int, Int)) = p._1 + p._2
f: (p: (Int, Int))Int

scala> f(1,2)
res0: Int = 3

1 つではなく 2 つの引数を指定した場合。

しかし、自動アンタプリングは得られません。

人々は常にそのように機能することを望んでいました

于 2014-04-08T17:54:15.837 に答える