gpt4 book ai didi

Scala:toSeq 与 Seq(某事:_*)

转载 作者:行者123 更新时间:2023-12-05 00:31:56 26 4
gpt4 key购买 nike

我写了一个名为extract的函数,定义如下:

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 序列(结果:_*)在提取功能中,一切正常。

谁能解释一下这种行为?

最佳答案

Nil::是只匹配 List 类型实例的提取器.您正在传递 Seq ,这是一个更普遍的特征,可能是也可能不是 List .

当您构建 Seq使用 Seq(...) , Scala 构建了一个 List默认情况下。 toSeq 的情况并非如此。 ,它通常将底层集合封装在最合适的 Seq 中界面。例如,Iterator.toSeq产生 Stream , 而 Array.toSeq产生 WrappedArray .

这就是为什么当您调用 toSeq 时您的代码不起作用的原因; String.split产生 Array (它是来自原始 Java String 类的方法)和 map保持其类型。您可以添加一个案例来处理 Seq 的实例。或让您的extract方法返回 List .

关于Scala:toSeq 与 Seq(某事:_*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com