gpt4 book ai didi

Scala 等价于 F# 中的 |> 或 Clojure 中的 ->>

转载 作者:行者123 更新时间:2023-12-01 07:54:26 25 4
gpt4 key购买 nike

在 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)
}

因此,这个 implicit class 模式用于扩展方法。这是“pimp my library”模式的简写:
class Pipe[T](x: T) { /*extension methods here*/ }
implicit def anyToPipe[T](x: T) = new Pipe(x)

与任何隐式转换一样,如果方法名称对 T 无效,但在隐式作用域中有一个函数 T => Pipe ,并且该方法在 Pipe 上有效,则该函数(或此处的方法 - 实际上是同一件事)由编译器,所以你得到一个 Pipe 实例。
def |> [U](f: T=>U): U = f(x)

这只是一个名为 |> 的方法,它有一个 f 类型的参数 T=>U ,即 Function1[T,U] ,其中 T 是输入类型, U 是结果类型。因为我们希望它适用于任何类型,所以我们需要通过添加 U 使方法在 [U] 上进行类型参数化。 (如果我们使用 T=>Any 代替,我们的返回将是 Any 类型,这不会有多大用处。)返回值只是函数对原始值的应用,根据需要。

关于Scala 等价于 F# 中的 |> 或 Clojure 中的 ->>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32506410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com