我想了解的执行List
S IN斯卡拉。 特别是,我试图让我的头围绕如何,你可以使用中缀运算符,例如写匹配表达式:
a match {
case Nil => "An empty list"
case x :: Nil => "A list without a tail"
case x :: xs => "A list with a tail"
}
比赛表现如何允许为x :: xs
,而不是List(x, xs)
我想了解的执行List
S IN斯卡拉。 特别是,我试图让我的头围绕如何,你可以使用中缀运算符,例如写匹配表达式:
a match {
case Nil => "An empty list"
case x :: Nil => "A list without a tail"
case x :: xs => "A list with a tail"
}
比赛表现如何允许为x :: xs
,而不是List(x, xs)
周杰伦康拉德的答案是差不多吧。 最重要的是在某个地方有一个名为对象::
它实现了unapply
方法,返回类型Option[(A, List[A])]
正是如此:
object :: {
def unapply[A](ls: List[A]): Option[(A, A)] = {
if (ls.empty) None
else Some((ls.head, ls.tail))
}
}
// case objects get unapply for free
case object Nil extends List[Nothing]
在的情况下::
和List
,这个物体时就会出来的事实是::
是扩展了的情况下,类List
特质。 然而,如上面的例子示出了,它不必须是一个的情况下类的。
我相信::实际上是一类 (这是列表的一个子类),所以说x :: xs
大多是相当于List(x, xs)
您可以与具有操作员姓名等情况下的类做到这一点。 例如:
case class %%%(x: Int, y: Int)
a match {
case x %%% y => x + y
}
比赛表现如何允许为x :: XS,而不是列表(x,XS)?
要回答这个问题:
当作为图案看到的那样,中缀操作,如对运算q是等同于运算(P,Q)。 也就是说,中缀操作符op被视为一个构造函数图案 。
(编程Scala中,第1版,331页)
另请参见Scala的case类问题