我知道在 Scala 中,方法永远不应该返回 null ...但是输入参数是什么?鉴于以下代码片段...

object MyObject {

    def myMethod(p: String): Option[String] = {
        if (p == null) throw new IllegalArgumentException("p is null.")
        ...
    }
}

...我检查 p 的方式正确吗?有什么推荐吗?

最佳答案

约定是 Scala 代码不使用空值(有少量异常,在使用这些库函数时应立即修复)。

因此,来自 Scala 的 null 表示出现问题(至少是 PBCAK ),因此您最好抛出异常。这不是常规操作;这是严重搞砸的事情。在您发现严重错误的任何地方捕获异常。捕获 IllegalArgumentException 而不是 NullPointerException 不会增加额外的信息。只留下原件。

如果代码来自 Java,处理它的规范方法是将它包装在 Option 中,这会将 null 转换为 None 。那么你可能甚至不需要抛出异常;只返回一个 None

def myMethod(p: String) = Option(p).map(_.toLowerCase)

如果您在它为空时无法继续,那么您需要考虑信息性异常是否会有所帮助。 Option(p).orElse(throw new IllegalArgumentException("Null!")) 是一种表达异常抛出情绪的紧凑方式。

在 Scala 2.10 中,您还可以将内容包装在 scala.util.Try(...) 中,这将自动为您捕获和打包异常。如果你想要一个打包的异常而不是一个抛出的异常,这是要走的路。 (并使用 Try 而不是 Option 。)
import scala.util.Try
def myMethod(p: String) = Try(p.toLowerCase)

最后,对于替代结果的更一般处理,请使用 Either 。错误处理的约定是预期输出是 Right(whatever) ,而 Left(whatever) 表示出现问题。

关于scala - 如何在 Scala 中处理空输入参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13635554/

10-12 22:54
查看更多