我可能有一個簡單的愚蠢問題,如何使用Scala Map來存儲不同的值類型,例如,我想要存儲字符串和雙值的Map,我試着下面的代碼:如何在scala中存儲不同的值類型
var yaraMap: Map[String, AnyRef] = Map()
yaraMap+={"as"->10.0}
yaraMap+={"bb"->'val'}
但它告訴類型不匹配,我該如何解決這個問題,謝謝!
我可能有一個簡單的愚蠢問題,如何使用Scala Map來存儲不同的值類型,例如,我想要存儲字符串和雙值的Map,我試着下面的代碼:如何在scala中存儲不同的值類型
var yaraMap: Map[String, AnyRef] = Map()
yaraMap+={"as"->10.0}
yaraMap+={"bb"->'val'}
但它告訴類型不匹配,我該如何解決這個問題,謝謝!
定義你的地圖爲
val yaraMap: Map[String, Any] = Map()
Any
是Double
和String
共同的超類型。
下圖顯示了AnyVal
和AnyRef
是如何關聯的。 String
是AnyRef
的亞型,Double
是AnyVal
的亞型,它們的共同超型是Any
。
從大衛弗蘭克答案是偉大的。這是一個小的改進,使代碼類型安全(注意:任何和AnyRef將允許你添加任何其他類型的地圖沒有編譯器抱怨)。
如果你只是想你的價值觀是雙人牀或字符串,你可以這樣做:
var yaraMap: Map[String, Either[Double, String]] = Map()
yaraMap+={"as"->Left(10.0)}
yaraMap+={"bb"->Right("val")}
可以說是更冗長,但至少如果你嘗試添加,它會破壞說List()
或任何其他類型。
yaraMap+={"as"->Left(34)}
<console>:9: error: type mismatch;
found : List[String]
required: Double
yaraMap+={"as"->Left(List("a"))}
太棒了!Coooooool! – Jack
謝謝大衛,爲什麼AnyRef和對象不好,但任何請。 – Jack
因爲'Double'不是'AnyRef'它的'AnyVal' –
非常感謝David對於漂亮的照片:) – Jack