我有以下代码:
abstract class AList {
def head:Int
def tail:AList
def isEmpty:Boolean
def ::(n: Int): AList = SimpleList(n, Empty)
}
object Empty extends AList {
def head = throw new Exception("Undefined")
def tail = throw new Exception("Undefined")
def isEmpty = true
}
case class SimpleList(head: Int, tail: AList = Empty) extends AList {
def isEmpty = false
}
1 :: 2 :: Empty
我想知道最后一行是如何运作的。没有从Int到SimpleList的隐式转换。因此我不理解方法调用机制。
的object.method(精氨酸)
我在这里看不到那种模式。我认为澄清scala表示法(中缀,后缀,后缀等)会有所帮助。我想要理解语法糖。
由于
答案 0 :(得分:8)
在Scala中,方法名以冒号结尾..
所以1 :: 2 :: Empty
实际上是Empty.::(2).::(1)
。
答案 1 :(得分:5)
::
是右操作数的方法。在scala中,如果方法名称以冒号结尾,则在右操作数上调用该方法。
因此1 :: 2 :: Empty
实际上是Empty.::(2)
,它返回SimpleList
。
一旦您了解1 :: <the-new-simple-list>
是右操作数的方法,后续的::
就很容易理解。