所以我试图实现这个定义: -
def validate(validationPredicates: List[A => Try[Boolean]]): Try[Boolean] = ???
它的工作方式如下: -
此处还有其他事情(各个验证器中的其他类型的副作用,但这不会影响操作链)。
有人能告诉我如何实现链和接受任何输入参数的函数的语法,但输出总是尝试[布尔]?
我可能会遗漏一些东西,但事实并非如此
Try(validationPredicates.forall(_(a).get))
Success(true)
,你将得到Success(true)
Success(false)
,你将得到Success(false)
并且不会再测试谓词Failed(e)
,.get
将重新抛出由外部Try捕获的异常,你将获得Failed(e)
这假设函数返回Try[Boolean]
。如果他们只返回Boolean
(如文中所述),那么只需删除.get
我没有谈到关于“接受任何输入args的函数的语法”这句话,因为我不知道它意味着什么,感觉就像一个单独的问题。
def validate[A](validationPredicates: List[A => Try[Boolean]]): A => Try[Boolean] =
(a: A) => validationPredicates.foldLeft(Try(true))(
(state, predicate) => state.flatMap(bool => predicate(a).map(_ && bool))
)
在猫世界,你正在寻找traverse