Scala类型不匹配,应为:List[Double],实际为:List[Any]
不匹配似乎是由这条线引起的Scala类型不匹配,应为:List[Double],实际为:List[Any],scala,generics,types,Scala,Generics,Types,不匹配似乎是由这条线引起的 object lab3zad4 extends App{ val l1 = List(2.0, -1.6, 3.2, 5.4, -8.4) val l2 = List(3.3, -3.1, 3.2, -4.1, -0.4, 5.5) val wyn = max(l1,l2,Nil).toString wyn.foreach(println) def max(l1: List[Double], l2: List[Double], wyn:List[Double
object lab3zad4 extends App{
val l1 = List(2.0, -1.6, 3.2, 5.4, -8.4)
val l2 = List(3.3, -3.1, 3.2, -4.1, -0.4, 5.5)
val wyn = max(l1,l2,Nil).toString
wyn.foreach(println)
def max(l1: List[Double], l2: List[Double], wyn:List[Double]) : List[Double] = {
if(l1.isEmpty)
wyn ::: l2
if(l2.isEmpty)
wyn ::: l1
// if(l1.nonEmpty && l2.nonEmpty)
max(l1.tail,l2.tail, wyn :: help(l1.head,l2.head) :: Nil)
def help(x:Double, y:Double): Double = {
if(x >= y)
x
else
y
}
}
}
当我从该行中删除Nil时,问题似乎消失了,但我无法使用::创建新列表。
我做错了什么?
感谢您的帮助您将
Double
转到String
这里:
max(l1.tail,l2.tail, wyn :: help(l1.head,l2.head) :: Nil)
然后您尝试将其预先添加到列表[Double]
val wyn = max(l1,l2,Nil).toString
因此Scala必须推断结果类型为List[Any]
,而max
函数期望List[Double]
长话短说,不要在wyn
上调用toString
help()
移动到max()
的顶部,而不是底部else
将那些if
检查转换为if(…)
的单个语句<代码>否则如果(..)<代码>其他:
用于将元素前置到列表的头部。如果需要将元素附加到列表的末尾,请使用:+
(在列表中效率非常低)
max(l1,l2,Nil)
的结果转换为字符串
,则不希望foreach(println)
覆盖它。这将println
字符串的每个字符
我使用了wyn.foreach(print)来打印结果
println(wyn)
更短、更清晰、更高效。为什么?更好吗?“abcde”。foreach(print)
调用print()
方法5次,对字符串的每个字符调用一次,而println(“abcde”)
只调用println()
方法一次。
// List[Nothing]
// \/
//
// ------ List[Double] --------
// \/ \/
// ---------- List[Any] --------------
// \/ \/
wyn :: help(l1.head,l2.head) :: Nil
// String Double Nil
else max(l1.tail,l2.tail, wyn :+ help(l1.head,l2.head))