Scala 是不是有类似于 Haskell 的 `$` 的运算符?

Posted

技术标签:

【中文标题】Scala 是不是有类似于 Haskell 的 `$` 的运算符?【英文标题】:Does Scala have an operator similar to Haskell's `$`?Scala 是否有类似于 Haskell 的 `$` 的运算符? 【发布时间】:2011-04-12 19:41:00 【问题描述】:

Scala 有类似Haskell's $ 的运算符吗?

-- | Application operator.  This operator is redundant, since ordinary
-- application @(f x)@ means the same as @(f '$' x)@. However, '$' has
-- low, right-associative binding precedence, so it sometimes allows
-- parentheses to be omitted; for example:
--
-- >     f $ g $ h x  =  f (g (h x))
--
-- It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,
-- or @'Data.List.zipWith' ('$') fs xs@.
-# INLINE ($) #-
($)                     :: (a -> b) -> a -> b
f $ x                   =  f x

【问题讨论】:

为了使问题独立,如果您解释一下 Haskell 构造是/做什么会很好。 $ 显然是右结合的,并且优先级较低 learnyouahaskell.com/…。 【参考方案1】:

是的,写着“申请”

fn apply arg

没有标准的标点符号运算符,但通过库拉皮条添加一个很容易。

  class RichFunction[-A,+B](fn: Function1[A, B]) def $(a:A):B = fn(a)
  implicit def function2RichFunction[-A,+B](t: Function1[A, B]) = new RichFunction[A, B](t)

一般来说,虽然 Scala 代码比 Java 密集得多,但不如 Haskell 密集。因此,创建像'$'和'.'这样的运算符的回报较少。

【讨论】:

$ 的一大优势是它在运算符部分的使用:(f $)($ x),它们在 Scala 中不存在(你会写 f(_) 和 @987654327 @ 代替,但你不能在 Haskell 中这样做)。

以上是关于Scala 是不是有类似于 Haskell 的 `$` 的运算符?的主要内容,如果未能解决你的问题,请参考以下文章

Haskell 在 Scala 中的新类型

sbt/Scala 是不是有类似于 Bundler/pip >= 或 ~= 的“兼容版本”?

Algebraic Data Type 及其在 Haskell 和 Scala 中的表现

Scala中的Haskell“forall”翻译

是否有类似于 Vector 和其他语言的 Haskell Repa 切片函数的使用?

AWS lambda 类似于 Haskell 函数的执行