根据这个问题:
我需要使用scalaz来获得我想要的东西,但是我很好奇,如果有人知道为什么以下不能像我期望的那样工作?
Map(1->2.0)+(1->1.0) //Map(1->1.0)
Run Code Online (Sandbox Code Playgroud)
我希望这会导致 Map(1->3.0).但是,似乎地图只返回最后一个键,如下所示:
Map(1->1.0, 1->3.0) //Map(1->3.0)
Run Code Online (Sandbox Code Playgroud)
所以,基于文档
向此集合添加两个或多个元素并返回一个新集合.
以上,我的猜测是地图可能存储值,但只返回最后一项?这不是我对添加应该做什么的直觉......也许这是一种效率举措.
一旦我有更多的时间,我会看一下代码并尝试从那里弄清楚,但是想问这里,以防有人已经知道了?
它与效率无关; 它在打字. Mapplus元素返回兼容类型的地图.你不知道类型,所以你不知道添加数字.你可以改为列出它们,但Seq(2.0,1.0)不是超类型2.0.因此,你最终会得到一张地图Any,在保持你的类型不变的情况下,它根本无法帮助你,你也无法用另一种方法替换现有的元素.
因此,+如果密钥不存在,则添加新元素;如果密钥存在,则替换现有元素.(不过,文档应该这样说.)
如果你想要"其他"行为,你需要一个更复杂的转换,这就是Scalaz |+|将为你做的元素的自然添加.
| 归档时间: |
|
| 查看次数: |
4351 次 |
| 最近记录: |