是否有类似于Haskell'的Scala运算符;美元?

是否有类似于Haskell'的Scala运算符;美元?,scala,operators,Scala,Operators,在Scala中是否有任何方法可以像在Haskell中使用$那样强制运算符优先级 例如,在Haskell中,您有: a b c = ((a b) c) 及 在Scala中有类似的方法吗?我知道Scala本身没有操作符,但有没有办法达到类似的效果?可以使用隐式实现类似的效果。例如: (未经测试,但应该是这样的) 使用此系统时,您不能使用名称$,因为名称需要以:(以修复关联性)结尾,并且美元是一个普通标识符(不是运算符标识符),因此不能将其与a:同名,除非用下划线分隔 那么,你如何使用它们呢?像这样

在Scala中是否有任何方法可以像在Haskell中使用$那样强制运算符优先级

例如,在Haskell中,您有:

a b c = ((a b) c)


在Scala中有类似的方法吗?我知道Scala本身没有操作符,但有没有办法达到类似的效果?

可以使用隐式实现类似的效果。例如: (未经测试,但应该是这样的)

使用此系统时,您不能使用名称$,因为名称需要以:(以修复关联性)结尾,并且美元是一个普通标识符(不是运算符标识符),因此不能将其与a:同名,除非用下划线分隔

那么,你如何使用它们呢?像这样:

val plusOne = (x: Int) => {x + 1}
plusOne &: plusOne &: plusOne &: 1

中缀vs。符号通常以类似的方式用于控制优先级:

a b c d == a.b(c).d
a.b c d == a.b.c(d)
a b c.d == a.b(c.d)
Scala对中缀表示法中使用的运算符也有固定的优先级顺序:

(all letters)
|
^
&
< >
= !
:
+ -
* / %
(all other special characters)
(所有字母)
|
^
&
< >
= !
:
+ -
* / %
(所有其他特殊字符)

通常可以显式选择名称来利用这一点。例如,标准解析器库中的
~
^

Scalaz定义了一个“pipe”操作符,其工作原理类似,但具有翻转参数。见

幻影选民再次追问,他没有留下任何解释。。。最奇怪最可爱的代码片段就是第一个——我会把它放在手边提醒自己这些规则。谢谢
a b c d == a.b(c).d
a.b c d == a.b.c(d)
a b c.d == a.b(c.d)
(all letters)
|
^
&
< >
= !
:
+ -
* / %
(all other special characters)