gpt4 book ai didi

scala - 如何在 Scala 中简洁地检查 null 或 false?

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

在 Groovy 语言中,检查 nullfalse 非常简单,如下所示:

常规代码:

def some = getSomething()
if(some) {
// do something with some as it is not null or emtpy

}

在 Groovy 中,如果 somenull 或为空字符串或为零数字等,则计算结果为 false。 Scala 中测试 nullfalse 的类似简洁方法是什么?假设 some 只是 Java 类型 String,那么这部分问题的简单答案是什么?

groovy 中另一个更好的方法是:

def str = some?.toString()

这意味着如果some不是null,那么将调用some上的toString方法而不是抛出异常如果 somenull,则为 NPE。 Scala 中有什么相似之处?

最佳答案

您可能会忽略的是 Scala 中像 getSomething 这样的函数可能不会返回 null、空字符串或零数字。一个函数可能会返回一个有意义的值,也可能不会返回一个 Option - 它会返回 Some(meaningfulvalue)None

然后您可以检查这一点并使用类似的方法处理有意义的值

 val some = getSomething()
some match {
case Some(theValue) => doSomethingWith(theValue)
case None => println("Whoops, didn't get anything useful back")
}

因此,Scala 没有尝试在返回值中编码“失败”值,而是对常见的“返回有意义的内容或指示失败”情况提供了特定支持。

话虽如此,Scala 与 Java 是可以互操作的,而 Java 总是从函数中返回 null。如果 getSomething 是一个返回 null 的 Java 函数,则有一个工厂对象可以从返回值中生成 Some 或 None。

所以

  val some = Option(getSomething())
some match {
case Some(theValue) => doSomethingWith(theValue)
case None => println("Whoops, didn't get anything useful back")
}

...我声称这非常简单,并且不会对您造成 NPE。

其他答案正在做有趣且惯用的事情,但这可能比您现在需要的更多。

关于scala - 如何在 Scala 中简洁地检查 null 或 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6416925/

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