以下是代码:
val m=scala.collection.mutable.HashMap[String, Long]()
var i=m.get("foo")
i=i+i
这是错误:
Error:(28, 9) type mismatch;
found : AnyVal
required: String
i=i+i
^
为什么i
突然变成AnyVal
?为什么此处需要String
,而我的地图中的值为Long
?
非常感谢
答案 0 :(得分:6)
你在REPL中试过这个吗?
scala> val m=scala.collection.mutable.HashMap[String, Long]()
m: scala.collection.mutable.HashMap[String,Long] = Map()
scala> var i=m.get("foo")
i: Option[Long] = None
i
<{1}},Long
<{1}},因为Option[Long]
可能不是foo
中的关键字
如果我不得不猜测为什么它需要HashMap
,那么scala编译器会尝试隐式转换String
Option[Long]
以便使用{{ 1}}方法。
如果你真的想加倍toString
,那么你需要+
i
map
在这种情况下仍然是Option
。
答案 1 :(得分:2)
get
上的Map[A,B]
方法返回Option[B]
。如果有条目,您将获得Some(element)
,否则None
。这与地图上的java get
不同。 +
未在选项上定义,这就是您收到错误的原因。
如果您确定地图包含该元素,则可以使用apply
方法。 m.apply("foo")
或含糖m("foo")
。