我只需要以功能方式编写代码
这是我的代码的样子:
val sqrt = (x: Double) => x*x
val doubleValue = (x: Double) => 2*x
val yoman = (list: List[Double], func: Function[Double, Double]) => list match {
case _ => func(list.head)
case Nil => list
}
yoman(1. :: 5. :: Nil, sqrt)
yoman(2. :: -6. :: Nil, doubleValue)
函数必须返回列表
它返回错误:
错误:预期为(9,80)')',但找到整数。 def get $$ instance $$ res0 = / * ### worksheet ###生成$$ end $$ * / yoman(1。:: 5. :: Nil,sqrt)
像“ ^”这样的箭头位于最后一行的“生成”字下
答案 0 :(得分:1)
首先,scala不喜欢使用::
将int构造为double。
scala> val doubles1: List[Double] = 1 :: 5 :: Nil
^
error: type mismatch;
found : List[AnyVal]
required: List[Double]
同时可以使用构造函数List[Double]
构建List(int1, int2)
scala> val doubles1: List[Double] = List(1, 5)
doubles1: List[Double] = List(1.0, 5.0)
或将值指定为double
scala> val doubles1: List[Double] = 1d :: 5d :: Nil
doubles1: List[Double] = List(1.0, 5.0)
您的库房看起来不错,但您可能要更新模式匹配项,因为示例中的第一个匹配项_
将匹配所有情况。
当您传入空List
yoman(List.empty[Double], doubleValue) // throws java.util.NoSuchElementException: head of empty list
更新以在尝试获取head元素之前检查列表是否为非空。
val sqrt = (x: Double) => x * x
val doubleValue = (x: Double) => 2 * x
val yoman = (list: List[Double], func: Function[Double, Double]) => list match {
case head :: _ => func(head)
case Nil => list
}
val doubles1: List[Double] = 1d :: 5d :: Nil
val doubles2: List[Double] = 1d :: 5d :: Nil
println(yoman(doubles1, sqrt)) //1.0
println(yoman(doubles2, doubleValue)) //2.0
可能也有帮助:Implicit conversion from List[Int] to List[Double] fails