【发布时间】:2021-04-08 22:34:49
【问题描述】:
我是一个新的 Scala 程序员,我有一个关于 Scala 数组模式匹配的问题:
def countErased(sorted: Array[Array[Int]], acc: Int): Int = {
sorted match{
case Array() | Array(_) => acc
case Array(h,n,_*) =>
if(n(0) < h(1)){
countErased(Array(h,_*), acc+1)
}else{
countErased(Array(n,_*), acc)
}
}
}
基本上我想要做的是:当我们有一个长度大于 2 的数组时,如果 n(0)
"error: missing parameter type for expanded function ((<x$1: error>) => x$1.$times) (in solution.scala)
countErased(Array(h,_*), acc+1)"
怎么了?
【问题讨论】:
-
这是一个完美的例子,你应该使用列表而不是数组,模式匹配有一些限制,由某些实现细节和类型层次结构的设置方式(以及当然也擦除)。可以使用别名和类型转换来完成这项工作,但它会非常难看。
-
补充@sinanspd 这段代码也非常高效,因为 Arrays 在所有这些操作上都很慢,请改用 List。会更简单、更美观、更高效、更安全。
标签: arrays scala functional-programming pattern-matching