我喜欢Scala提出的运算符优先级,但在极少数情况下,未经修改的规则可能不方便,因为在命名方法时有限制.有没有办法为Scala中的类/文件等定义另一个规则?如果没有,将来会解决吗?
我刚刚开始使用Scala,我刚学会了如何使方法成为正确关联(而不是在命令式面向对象语言中常见的更传统的左关联性).
首先,当我cons在Scala中看到列表的示例代码时,我注意到每个示例总是在右侧有List:
println(1 :: List(2, 3, 4))
newList = 42 :: originalList
Run Code Online (Sandbox Code Playgroud)
然而,即使在一遍又一遍地看到这一点之后,我也没有三思而后行,因为我不知道(当时)这::是一种方法List.我只是假设它是一个运算符(再次,在Java中的运算符意义上),并且关联性并不重要.List在示例代码中始终出现在右侧的事实似乎巧合(我认为它可能只是"首选样式").
现在我知道的更好:它必须以这种方式编写,因为它::是正确联想的.
我的问题是,能够定义右关联方法的重点是什么?
这纯粹是出于审美原因,还是在某些情况下,权利关联实际上可以带来某些与左联结相关的好处?
从我(新手)的角度来看,我真的不知道如何
1 :: myList
Run Code Online (Sandbox Code Playgroud)
比任何更好
myList :: 1
Run Code Online (Sandbox Code Playgroud)
但这显然是一个微不足道的例子,我怀疑这是一个公平的比较.
在Java中,<具有比==更高的优先级.在Scala中,反之亦然.我想知道Scala人为什么选择这种方式?其他二元运算符优先级与Java对齐(exept按位运算,但可以理解为什么它们没有给出特殊的优先级).
更新:这实际上是语言规范中的一个错误,'<'实际上比Scala中的'=='更高优先级.