如何解决理解如何在比较中返回 None ?
下面如何打印为 None
,因为这里的最大值是 3
val firstNum: Option[Int] = None
val secondNum: Option[Int] = Some(3)
val a = for {
f <- firstNum
s <- secondNum
} yield Math.max(f,s)
println(a)
None
解决方法
正如在评论部分提到的那样,您正在使用 for-comprehension
构造,它在幕后调用 flatMap
方法,根据左身份单子定律,它总是这样工作:None.flatmap(f) == None
。
如果您想在两个 Option[Int]
之间找到最大值并忽略它们中的任何一个,请尝试:
val firstNum: Option[Int] = None
val secondNum: Option[Int] = Some(3)
println(List(firstNum,secondNum).flatten.max)
斯凯蒂:https://scastie.scala-lang.org/UbCy36hHS3iVLKEdqzqUCw
,只是为了补充@IvanKurchenko 的精彩回答。如果 .max
中没有元素,List
可能会抛出异常。例如:
List[Option[Int]](None).flatten.max
会抛出异常:
java.lang.UnsupportedOperationException: empty.max
相反,您可以使用 maxOption
:
List(Some(3),None).flatten.maxOption
将提供 Some(3)
和
List[Option[Int]](None).flatten.max
将提供None
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。