gpt4 book ai didi

scala - 在 Scala 中将选项转换为任一

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

假设我需要转换 Option[Int]Either[String, Int]在斯卡拉。我想这样做:

def foo(ox: Option[Int]): Either[String, Int] =
ox.fold(Left("No number")) {x => Right(x)}

不幸的是,上面的代码无法编译,我需要添加类型 Either[String, Int]明确地:
ox.fold(Left("No number"): Either[String, Int]) { x => Right(x) }

是否可以转换 OptionEither这样不添加类型?
您建议如何转换 OptionEither ?

最佳答案

不,如果你这样做,你不能遗漏类型。
Left("No number")的类型推断为 Either[String, Nothing] .仅来自 Left("No number")编译器无法知道您想要 Either 的第二种类型成为 Int ,并且类型推断还没有到编译器会查看整个方法并决定它应该是 Either[String, Int] 的程度。 .

您可以通过多种不同的方式来做到这一点。例如模式匹配:

def foo(ox: Option[Int]): Either[String, Int] = ox match {
case Some(x) => Right(x)
case None => Left("No number")
}

或使用 if表达:
def foo(ox: Option[Int]): Either[String, Int] =
if (ox.isDefined) Right(ox.get) else Left("No number")

或与 Either.cond :
def foo(ox: Option[Int]): Either[String, Int] =
Either.cond(ox.isDefined, ox.get, "No number")

关于scala - 在 Scala 中将选项转换为任一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706443/

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