List("a"->1, "b"->2) match { case List( k->v ,_*) => println(k) }
List("a"->1, "b"->2) match { case List( (k,v) ,_*) => println(k) }
成功
Map("a"->1, "b"->2) match { case Map( (k,v) ,_*) => println(k) }
error:value Map不是case类,也没有unapply / unapplySeq成员
你能用箭头->
来解释为什么左侧成功;在->
右侧,Tuple
失败
如果我将其更改为实际类型Map
(k,v),那么它就会成功
但是,如果使用unapply
,则会再次失败。
我无法想象Scala没有为Map实现::
?
编辑:
我认为->
可以用于模式匹配;可->
好的,现在{{1}}是一种方法,因此无法匹配。
Scala不直观。
答案 0 :(得分:2)
->
语法只是创建元组的简写。因此'a' -> 1
实际上会返回(Char, Int)
类型的内容。由于它不是类型,因此您无法匹配该语法。匹配元组。
同样对于地图,我不确定是否有提取器。您通常需要和unapplySeq
方法,它被定义为返回序列。语法_ *意味着传递一系列参数,而map根据定义是一种无序结构。您始终可以使用toSeq
来获取一系列元组。