bigbully +

断言的最佳实践

只是一个工具类,对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")

甚至可以链式编程,是不是很赞啊?