斯卡拉模式匹配地图与箭头符号

时间:2015-03-20 11:17:08

标签: scala pattern-matching

  1. List("a"->1, "b"->2) match { case List( k->v ,_*) => println(k) }
    错误:未找到:值 - >
  2. List("a"->1, "b"->2) match { case List( (k,v) ,_*) => println(k) }
    成功

  3. Map("a"->1, "b"->2) match { case Map( (k,v) ,_*) => println(k) }
    error:value Map不是case类,也没有unapply / unapplySeq成员

  4. 你能用箭头->来解释为什么左侧成功;在->右侧,Tuple失败 如果我将其更改为实际类型Map(k,v),那么它就会成功 但是,如果使用unapply,则会再次失败。 我无法想象Scala没有为Map实现::


    编辑: 我认为->可以用于模式匹配;可-> 好的,现在{{1}}是一种方法,因此无法匹配。 Scala不直观。

1 个答案:

答案 0 :(得分:2)

->语法只是创建元组的简写。因此'a' -> 1实际上会返回(Char, Int)类型的内容。由于它不是类型,因此您无法匹配该语法。匹配元组。

同样对于地图,我不确定是否有提取器。您通常需要和unapplySeq方法,它被定义为返回序列。语法_ *意味着传递一系列参数,而map根据定义是一种无序结构。您始终可以使用toSeq来获取一系列元组。