Scala:Undocumented Extractor`::`

时间:2017-12-20 09:40:00

标签: scala pattern-matching

使用Scala的api documentation很明显如何使用::语法构造列表,该语法引用列表上的方法。

但是{ case 1 :: 2 :: _ => ??? }中用于模式匹配的中缀表示法中的提取器将需要具有unapply方法的对象。 所以我的问题是:这个未记录的提取器::在Scala中来自哪里?

2 个答案:

答案 0 :(得分:1)

以下是::实施的方式

/** A non empty list characterized by a head and a tail.
 *  @param head the first element of the list
 *  @param tl   the list containing the remaining elements of this list after the first one.
 *  @tparam B   the type of the list elements.
 *  @author  Martin Odersky
 *  @version 1.0, 15/07/2003
 *  @since   2.8
 */
@SerialVersionUID(509929039250432923L) // value computed by serialver for 2.11.2, annotation added in 2.11.4
final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] {
  override def tail : List[B] = tl
  override def isEmpty: Boolean = false
}

有关详细信息,请访问Scala's '::' operator, how does it work?

答案 1 :(得分:0)

对于列表中的::,提取器是作为case class ::的一部分生成的。 在模式匹配中使用::称为构造函数模式。