我试图理解的实施List
在 Scala 中。特别是,我试图了解如何使用中缀运算符编写匹配表达式,例如:
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]
如果是::
and List
,这个对象恰好来自以下事实:::
是一个案例类,它扩展了List
特征。然而,正如上面的例子所示,它并没有have根本就是一个案例类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)