【发布时间】:2016-03-01 16:00:20
【问题描述】:
在下面的示例中,有一个函数 seqResult 与 Seq 匹配。另一个接受可变参数的函数调用seqResult 并传入ArrayBuffer。这会导致在使用Seq 或ArrayBuffer 调用时模式匹配结果不同。
Seq 匹配器匹配case head :: rest => ...,ArrayBuffer 匹配器匹配case Seq(one, two) => ...。
这是一个错误吗?有没有办法防止这种情况发生?
如果这不是错误,那么有什么安全方法可以匹配一个或多个适用于 Seq(a,b) 和 ArrayBuffer(a,b) 的条目列表?
def seqResult(arr:Seq[String]) = arr match {
case Nil => "Nil"
case head :: Nil => "head :: Nil"
case head :: rest => "head :: rest"
case Seq(one, two) => "one, two"
case _ => "other"
}
def varArgResult(args:String*) = seqResult(args)
val ab = varArgResult("one", "two")
val se = seqResult(Seq("one", "two"))
println(ab) //=> "one, two"
println(se) //=> "head :: rest"
【问题讨论】:
标签: scala scala-2.11