scala – 如何在此示例中修复类型推断错误?
发布时间:2020-12-16 18:38:56 所属栏目:安全 来源:网络整理
导读:假设我写作: sealed trait Statusobject Error1 extends Statuscase 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 =
假设我写作:
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)) 您如何建议解决此类问题? 解决方法
如您所见,折叠推断从第一个arg提供的零/回退值返回类型.它是错误,因为它解决了最具体的值类型.
您可以通过以下方式注释折叠以指示您想要状态. opt.fold[Status](err)(x => Ok(x)) opt.fold(err: Status)(x => Ok(x)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |