scala – if(p(f(a),f(b)))的功能等价物a else b
发布时间:2020-12-16 09:21:09 所属栏目:安全 来源:网络整理
导读:我猜想必须有更好的功能表达方式: def foo(i: Any) : Intif (foo(a) foo(b)) a else b 所以在这个例子中f == foo和p == _ _.在这里,必须有一些高超的聪明才智!我可以看到使用BooleanW我可以写: p(f(a),f(b)).option(a).getOrElse(b) 但是我确信我可以编写
我猜想必须有更好的功能表达方式:
def foo(i: Any) : Int if (foo(a) < foo(b)) a else b 所以在这个例子中f == foo和p == _< _.在这里,必须有一些高超的聪明才智!我可以看到使用BooleanW我可以写: p(f(a),f(b)).option(a).getOrElse(b) 但是我确信我可以编写一些只提及a和b一次的代码.如果存在这个问题,它必须在Function1W的某些组合上,而另外一些则是scalaz对我来说有点神秘! 编辑:我想我在这里问的不是“我该怎么写?”但是“这样一个功能的正确名称和签名是什么,并且与FP类似的东西有什么关系,我还不了解,像Kleisli,Comonad等? 解决方法
以防万一不在Scalaz:
def x[T,R](f : T => R)(p : (R,R) => Boolean)(x : T*) = x reduceLeft ((l,r) => if(p(f(l),f(r))) r else l) scala> x(Math.pow(_ : Int,2))(_ < _)(-2,1) res0: Int = -2 一些开销的替代方案,但更好的语法. class MappedExpression[T,R](i : (T,T),m : (R,R)) { def select(p : (R,R) => Boolean ) = if(p(m._1,m._2)) i._1 else i._2 } class Expression[T](i : (T,T)){ def map[R](f: T => R) = new MappedExpression(i,(f(i._1),f(i._2))) } implicit def tupleTo[T](i : (T,T)) = new Expression(i) scala> ("a","bc") map (_.length) select (_ < _) res0: java.lang.String = a (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |