有一个方法def invoke(...): Boolean
我希望我能用这样的orElse
链接一些错误处理:
invoke(...) orElse (throw InvokeError(...))
如果orElse
的返回值为invoke(...)
,则执行false
部分。现在我了解到orElse
不是Boolean
的方法。
orElse
类型上设置Boolean
是否有意义?if (!invoke(...)) throw InvokeError(...)
除外)答案 0 :(得分:3)
如何
invoke(...) || (throw InvokeError(...))
||
是逻辑or
,它是短路的,这意味着只有当第一个参数为假时,它的第二个参数才会被懒惰地评估。
话虽如此,它可能更适合您的invoke
方法返回更具语义意义的内容,例如Option
或Try
。
答案 1 :(得分:1)
你可以使用orElse
和一点点伏都教:
class RichBoolean(b: Boolean) {
def orElse(f: (Boolean) => Unit) = f(b)
}
object RichBoolean {
implicit def enrich(b: Boolean) = new RichBoolean(b)
}
现在您可以通过以下方式使用它:
import RichBoolean._
val throwInvokeError = (b: Boolean) => if (!b) throw InvokeError(...)
invoke(...).orElse(throwInvokeError)