gpt4 book ai didi

scala - 用 Map#getOrElse 输入奇怪的东西

转载 作者:行者123 更新时间:2023-12-04 07:31:09 25 4
gpt4 key购买 nike

考虑

scala> val m = Map('a -> 3, 'b -> 4)
m: scala.collection.immutable.Map[Symbol,Int] = Map('a -> 3, 'b -> 4)

scala> val d: Double = m.getOrElse('c, 0)
<console>:8: error: type mismatch;
found : AnyVal
required: Double
val d: Double = m.getOrElse('c, 0)
^

scala> m.getOrElse('c, 0)
res0: Int = 0

scala> m.getOrElse('a, 0)
res1: Int = 3

为什么 Scala 认为 getOrElse调用返回 AnyVal即使它显然返回 Int ?

此外,即使这失败并出现相同的错误:
scala> val x: Double = m.getOrElse('a, 0): Double
<console>:8: error: type mismatch;
found : AnyVal
required: Double
val x: Double = m.getOrElse('a, 0): Double

然而,这有效:
scala> val x: Double = m.getOrElse('a, 0): Int
x: Double = 3.0

这发生在 2.11.x 上;我没有在 2.10.x 上试过。

最佳答案

签名getOrElse是:

def getOrElse[B1 >: B](key: A, default: ⇒ B1): B1 

用你的陈述
val d: Double = m.getOrElse('c, 0)

你告诉 Scala B1应该是 Double .但是 Double不是 Int的超型, 常见的父类(super class)型是 AnyVal .因此,您不能进行该分配...

尝试类型转换 Int结果为 Double反而:
val d /* : Double */ = m.getOrElse('c, 0).toDouble

关于scala - 用 Map#getOrElse 输入奇怪的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25897784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com