在下面的代碼,地圖鍵可以直接存儲在val
時使用或,而不是存儲在當case class
:從案例類中提取時,爲什麼Map鍵類型不工作?
sealed trait FooKey
case object KeyA extends FooKey
case object KeyB extends FooKey
case class KaseKey(key:FooKey)
object Main extends App {
val m = Map(KeyA -> "A", KeyB -> "B")
val kk = KaseKey(KeyA)
val kv = KeyA
m(KeyA) // works
m(kv) // works
m(kk.key) // error: found: Main.kk.key.type (with underlying type FooKey)
}
最後一行中所示的完整的錯誤是:
Error:(16, 8) type mismatch;
found : Main.kk.key.type (with underlying type FooKey)
required: Product with Serializable with FooKey
這是什麼原因?爲什麼密鑰不再被接受,並且一旦存儲在case class
中,就無法進行類型檢查?
這裏有一些編譯器的東西。 'val m:Map [FooKey,String] = Map(KeyA - >「A」,KeyB - >「B」)m(kk.key)'似乎有效。 – jarandaf 2015-03-13 10:41:29