2016-09-02 6 views
0

私は次のメソッドを持つクラスがあります:私は_たちはいくつかの特定の文字を使用したくないような状況で使用することができると思ったプレースホルダが機能しないのはなぜですか?

def message[A <: AnyRef](a: A) = a match { 
    case str: String => messages ++ str 
    case _: AnyRef => serializer.write(_) //compile error 
} 

を。しかし、

def message[A <: AnyRef](a: A) = a match { 
    case str: String => messages ++ str 
    case a: AnyRef => serializer.write(a) 
} 

が問題ありません。

_の問題を教えてください:メソッドのパラメータとしての使用の限界は何ですか?

+1

https://stackoverflow.com/questions/8000903/what-are-all-the-uses-of-an-underscore-in-scala – dveim

答えて

1

serializer.write(_)にエラーが発生します。コンパイラにはこの_の値はありません。たとえば、List(1, 2, 3) map (_ + 2)と書くとList(1, 2, 3) map (x => x + 2)に、になるとx_で非表示になることがあります。

2

case _: AnyRef => serializer.write(_)これらのワイルドカードは関連しません。あなたの最初の_は、あなたがそれをタイプした名前を気にしないことを意味します。 2番目の_は、現時点ではwriteに何が提供されても構わないことを意味し、後でそれを提供します。あなたのコードの_は、あなたが考えているように、関連していません。

関連する問題