加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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,这将没有多大用处.)返回值只是将函数应用于原始值,如果需要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读