我喜欢使用require
, assert
,assume
和 ensure 来记录给定函数的前置条件和后置条件,但我也开始scalaz.Validation
主要用于执行需要执行的检查。但是,最近,我对使用PartialFunction
(可能与Validation
)来记录前置条件最感兴趣。就像是:
case class Summary(user: String, at: DateTime, ....)
val restricted_add: PartialFunction[(Summary, Summary), Summary] = {
case (s1: Summary, s2: Summary) if s1.user != s2.user && s1.at == s2.at =>
}
具有用于捕获匹配错误并将其转换为验证失败的实用程序功能(例如restricted_add.lift(_).toSucess("Cannot add.")
)。不知何故,上面的 case 子句似乎没有For
with嘈杂scalaz.Validation
。但我觉得我在反对这种语言。我没有使用def
's 自然语法来定义参数,这样一个函数的每个客户端在调用它时都必须使用一个实用函数,我将捕获异常并将它们转换为验证,而不是仅使用验证或仅使用例外。
通过代码记录这些前提条件的最不嘈杂、最实用的方法是什么?Validation
返回函数、require
语句PartialFunction
、其他...?