Scala与F#中的|>或Clojure中的 – >>等价
发布时间:2020-12-16 10:06:44 所属栏目:安全 来源:网络整理
导读:在 Scala中,当我有这个表达时 f1 ( f2 ( f3 (p))) 有没有办法让我可以使用像 F# p | f3 | f2 | f1 还是Clojure? (- p f3 f2 f1) 解决方法 如果你想在不使用外部库的情况下自己编写, implicit class Pipe[T](x: T) { def | [U](f: T=U): U = f(x)} 因此,此隐
在
Scala中,当我有这个表达时
f1 ( f2 ( f3 (p))) 有没有办法让我可以使用像 F# p |> f3 |> f2 |> f1 还是Clojure? (->> p f3 f2 f1) 解决方法
如果你想在不使用外部库的情况下自己编写,
implicit class Pipe[T](x: T) { def |> [U](f: T=>U): U = f(x) } 因此,此隐式类模式用于扩展方法.它是“皮条客我的图书馆”模式的简写: class Pipe[T](x: T) { /*extension methods here*/ } implicit def anyToPipe[T](x: T) = new Pipe(x) 与任何隐式转换一样,如果方法名称对T无效,但有一个函数T =>管道在隐式范围内,并且该方法在Pipe上有效,编译器插入函数(或此处的方法 – 实际上是相同的东西),以便获得Pipe实例. def |> [U](f: T=>U): U = f(x) 这只是一个名为|>的方法.具有类型T => U的参数f,即Function1 [T,U],其中T是输入类型,U是结果类型.因为我们希望这适用于任何类型,我们需要通过添加[U]使方法在U上进行类型参数化. (如果我们使用T => Any,我们的返回类型为Any,这将没有多大用处.)返回值只是将函数应用于原始值,如果需要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |