我写了一个名为提取物,定义函数如下:斯卡拉: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