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 的 `$` 的运算符?的主要内容,如果未能解决你的问题,请参考以下文章
sbt/Scala 是不是有类似于 Bundler/pip >= 或 ~= 的“兼容版本”?
Algebraic Data Type 及其在 Haskell 和 Scala 中的表现