gpt4 book ai didi

scala - 如何在此折叠示例中解决类型推断错误?

转载 作者:行者123 更新时间:2023-12-04 10:00:40 25 4
gpt4 key购买 nike

假设我正在写:

sealed trait Status
object Error1 extends Status
case class Ok(x: Int) extends Status

def foo(opt: Option[Int]): Status = opt.fold(Error1)(x => Ok(x))

当我在REPL中尝试时,出现错误:
scala> def foo(opt: Option[Int]): Status = opt.fold(Error1)(x => Ok(x))
<console>:11: error: type mismatch;
found : Ok
required: Error1.type
def foo(opt: Option[Int]): Status = opt.fold(Error1)(x => Ok(x))
^

我可以解决它,但是它看起来并不特别优雅:
 // work around the type error above
val error1: Status = Error1
def ok(x: Int): Status = Ok(x)

def foo(opt: Option[Int]): Status = opt.fold(error1)(x => ok(x))

您如何建议解决此类问题?

最佳答案

如您所见,fold从作为第一个arg提供的零/后备值推断返回类型。因为它解析值的最特定类型,所以它是Error

您可以通过以下方式注释折叠,以表示您需要Status

opt.fold[Status](err)(x => Ok(x))
opt.fold(err: Status)(x => Ok(x))

关于scala - 如何在此折叠示例中解决类型推断错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29587435/

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