在下面的示例中,有一个功能seqResult
,该模式与Seq
匹配。另一个接受可变参数的函数调用seqResult
并传入ArrayBuffer
。这会使模式匹配结果与Seq
或ArrayBuffer
调用时不同。模式匹配对ArrayBuffer返回不同结果并且Seq
与Seq
匹配器命中case head :: rest => ...
,与ArrayBuffer
匹配器命中case Seq(one, two) => ...
。
这是一个错误?无论如何要保护这一点?
如果它不是一个bug,匹配一个或多个条目的列表的安全方法是什么?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"
干杯 - 我在找什么 –