gpt4 book ai didi

scala - 选项 getOrElse 类型不匹配错误

转载 作者:行者123 更新时间:2023-12-03 02:28:20 25 4
gpt4 key购买 nike

为什么此代码在 Scala 2.9.2 中引发类型不匹配错误?我期望 getOrElse 返回类型 String 但实际上它返回 java.io.Serialized:

scala> implicit def StringToOption(s:String) = Option(s)
StringToOption: (s: String)Option[String]

scala> "a".getOrElse("")
res0: String = a

scala> var opt:Option[String] = "a".getOrElse("")
<console>:8: error: type mismatch;
found : java.io.Serializable
required: Option[String]
var opt:Option[String] = "a".getOrElse("")
^

这没问题:

scala> implicit def StringToOption(s:String): Option[String] = Option(s)
StringToOption: (s: String)Option[String]

scala> var b:Option[String] = "a".getOrElse("") toString
b: Option[String] = Some(a)

最佳答案

这是不完整的树遍历的不良情况。 getOrElse 的签名允许类型加宽,因此当它意识到 String 不是 Option[String] 时,它首先尝试填充不同的类型getOrElse 上的归属,即 Serialized。但现在它有 "a".getOrElse[Serializing]("") 并且它被卡住了——我猜它没有意识到问题是在检查隐式之前使类型变得太笼统.

一旦您意识到问题,就有解决办法:

"a".getOrElse[String]("")

现在打字者不会沿着让我们加宽的路径徘徊,而是找到隐含的内容。

关于scala - 选项 getOrElse 类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13186063/

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