【问题标题】:Does Scala have a function application operator?Scala 有函数应用运算符吗?
【发布时间】:2014-04-10 08:44:27
【问题描述】:

F# 有管道操作符:

arg |> func // or arg2 |> func arg1, as opposed to func arg1 arg2
func <| arg

Haskell 有 $ 运算符:

func $ arg -- or func1 $ func2 arg, as opposed to func1 (func2 arg)

它们主要用于通过整理函数调用来提高可读性。

Scala 中有类似的运算符吗?

【问题讨论】:

    标签: scala haskell f# functional-programming


    【解决方案1】:

    Scala 在标准库中没有这个运算符。

    Scalaz带来画眉算子:

    arg |> method
    

    如果您更喜欢 Cats 而不是 Scalaz,则需要 Mouse 配套库来获得相同的运算符。

    【讨论】:

      【解决方案2】:

      没有。不过,您可以轻松定义自己的。

      implicit class PipeEverything[A](val underlying: A) extends AnyVal {
        def |>[B](f: A => B) = f(underlying)
      }
      

      【讨论】:

      • 我可能应该提到$ 是右关联的,不仅可以让您传入单个参数,还可以将整个表达式作为参数传递
      • @ElectricCoffee 如果你想要右关联性,就叫它$:|&gt; 已经是最低优先级,除了字母(请参阅stackoverflow.com/questions/2922347/…)。
      • @ElectricCoffee - 你总是可以在左边放一个表达式;你只需要括号或大括号。如果将: 附加到符号方法名称,它将是右关联的。所以|: 将是一个右关联|&gt;
      • @RexKerr $ 的全部意义在于删除括号,因此必须添加它们会使其毫无意义
      • @ElectricCoffee - 可能有其他原因优先考虑参数(例如(xs.head + 2) |&gt; { y =&gt; (y,y) })。 “我希望 Scala 看起来像 Haskell”是一种动力,迟早会让你失望。 (就像“我希望 Haskell 看起来像 Scala”等等。)
      猜你喜欢
      • 2017-04-16
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2013-08-13
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多