我寫了一個名爲提取物,定義函數如下:斯卡拉:toSeq VS SEQ(東西:_ *)
def extract(params: String): Seq[String] = {
val result = params.split(",") map (param => param.trim())
result toSeq
}
然後我進行模式匹配了提取物結果,就像這樣:
extract(myInputString) match {
case Nil => // do something
case head :: Nil => // do something
case head :: tail => // do something
}
每當我的模式情況下無=>分支匹配,我得到一個
scala.MatchError: WrappedArray(T) (of class scala.collection.mutable.WrappedArray$ofRef)
在另一方面
,如果我更換結果toSeq與SEQ(結果:_ *)在提取物功能,一切工作正常。
任何人都可以解釋這種行爲嗎?
從列表\ [(字符,字符)[奇怪的類型轉換的可能重複\ ] to Object](http://stackoverflow.com/questions/13754800/strange-type-conversion-from-listchar-char-to-object) –
總之,通過編寫head :: Nil,指示模式匹配等待a ** List **,但不是所有的Seq都是列表(例如WrappedArray **不是**列表)。參見上面的鏈接。爲了做到這一點,你可以用'.toList'替換'.toSeq'。 –
@ om-nom-nom謝謝你的回答,但我已經找到了解決我的問題的方法(用** Seq(result:_ *)**取代**結果給Seq**),我只是想知道爲什麼會發生這種情況因爲(據我所知),** :: **提取模式應該支持所有序列,即使它們不是列表... – fedragon