tha*_*att 9 scala list match infix-operator
我试图理解ListScala 中s 的实现.特别是我试图了解如何使用中缀运算符编写匹配表达式,例如:
a match {
case Nil => "An empty list"
case x :: Nil => "A list without a tail"
case x :: xs => "A list with a tail"
}
Run Code Online (Sandbox Code Playgroud)
如何允许匹配表达式x :: xs而不是List(x, xs)?
Dan*_*wak 13
杰伊康拉德的回答几乎是正确的.重要的是,某处有一个名为的对象::实现了该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]
Run Code Online (Sandbox Code Playgroud)
在的情况下,::和List,这个物体时就会出来的事实::是它扩展了的情况下,类List特质.然而,如上面的例子示出了,它不具有是的情况下类的.
我相信::实际上是一个类(它是List的子类),所以说x :: xs大致相当于List(x, xs).
您可以使用具有运算符名称的其他案例类来执行此操作.例如:
case class %%%(x: Int, y: Int)
a match {
case x %%% y => x + y
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2858 次 |
| 最近记录: |