我知道在 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/