1

以下に示すように、単に KeyVal オブジェクトを作成するときは暗黙的な変換が機能するのに、KeyVal である Map にキーを作成するときは機能しない理由を教えてください。

ありがとうございました。

object o {
  case class KeyVal(i: Int)
  object KeyVal {
    implicit def strToKeyVal(s:String) = KeyVal(s.toInt)
  }
}

import o._

val x : KeyVal = "1"  // Works fine to create a KeyVal

val x : Map[KeyVal, String] = Map("1" -> "One") // Type Mismatch: found (String, String), wants (KeyVal, String)
4

2 に答える 2

3

タイミングの問題です。の型Mapが考慮される頃には、もはやStringではなく(String, String)タプルになっています。これ->は、 が最初に適用され、次にその結果が に対して返されるために発生しMapます。

その演算子の使用を避けると、次のように機能します。

val x : Map[KeyVal, String] = Map(("1", "One"))
于 2013-07-03T21:12:48.947 に答える