G33*_*33K 1 scala map scala-collections
这是代码:
val m=scala.collection.mutable.HashMap[String, Long]()
var i=m.get("foo")
i=i+i
Run Code Online (Sandbox Code Playgroud)
这是错误:
Error:(28, 9) type mismatch;
found : AnyVal
required: String
i=i+i
^
Run Code Online (Sandbox Code Playgroud)
为什么i突然变成AnyVal?为什么String这里需要我的地图中的值Long?
非常感谢
你在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
Run Code Online (Sandbox Code Playgroud)
i是不是一个Long,而是一个Option[Long],因为foo可能不是在一个关键HashMap.
如果我不得不猜测为什么说它String是必需的,那就是scala编译器试图隐式转换Option[Long] toString以便使用该+方法.
如果你真的想加倍i,那你就需要map了Option
i.map(x => x + x)
Run Code Online (Sandbox Code Playgroud)
在这种情况下仍然是None.
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |