断言的最佳实践
2016-11-07
只是一个工具类,对scala原有的断言做了一点改进,就变得异常好用,代码量更少,可读性极高。
object Helpers {
@inline final implicit class Requiring[A](val value: A) extends AnyVal {
//可以直接传入断言的值,如果断言失败抛出IllegalArgumentException
@inline def requiring(cond: Boolean, msg: ⇒ Any): A = {
require(cond, msg)
value
}
//也可以传入断言的函数,如果断言失败抛出IllegalArgumentException
@inline def requiring(cond: A ⇒ Boolean, msg: ⇒ Any): A = {
require(cond(value), msg)
value
}
}
}
用法就太简单了,首先引用Helpers._
import Helpers._
然后:
125.requiring(_ % 25 == 0, "125 can be divided by 25")
.requiring(_ < 130, "smaller than 130")
甚至可以链式编程,是不是很赞啊?