在下面的示例中,有一個功能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"
乾杯 - 我在找什麼 –