我在我的个人项目中尝试实现的是一个“评估函数”,它应该选择一个有效的策略,而不需要调用两次。目前,我的代码是:
fun electStrategy() = listOf({ attemptStrategyA(x) }, { attemptStrategyB(x) })
.find{ it.invoke() == true } ?.invoke()
// where `attemptStrategyA(x)` and `attemptStrategyB(x)` return `T`
从上面的内容可以看出,我首先需要以一种懒惰的方式对策略进行求值,然后,当满足 predicate 条件时,我希望获得所选的策略值。
我怎样才能做到以上几点,而不必对这种策略进行两次更优雅的评估呢?
1条答案
按热度按时间lh80um4z1#
我认为你的例子在 predicate 上有问题,但是假设
predicate()
是一个在策略调用的结果上返回true或false的函数,你可以这样写:使用
sequenceOf
而不是listOf
会使.map
操作延迟,这意味着在尝试下一个策略之前,将对策略的结果计算 predicate 。