我想表明函数可能会抛出异常。目前,我有几个验证函数:
val throwUnlessX: String => Unit = (foo: String) => {
if (foo != "bar") {
throw new Throwable("Poit!")
}
}
它以Unit
作为返回类型键入,但严格来说这并不完全正确,因为函数也可能永远不会返回,因为它可能会抛出异常。
其他语言有定义never
类型的概念,无论是无限循环还是抛出异常。
我可以做些什么来向开发人员表明函数可能会抛出或永远不会返回吗?
答案 0 :(得分:1)
您可以使用@throws注释来声明方法可以抛出的异常。
展示示例:
class Reader(fname: String) { private val in = new BufferedReader(new FileReader(fname)) @throws[IOException]("if the file doesn't exist") def read() = in.read() }
答案 1 :(得分:0)
在Scala中有一些类型可以代表这些案例:
Try
捕获异常的概念;在您的情况下Try[Unit]
Nothing
但是,我强烈建议在不抛出异常的用例中使用一些验证库;例如,一个好的候选人将是Scalaz。