我是一个学习 scala 并研究匿名函数和值的初学者。我无法转换{case e if e % 2 == 0 => e}为 Val。我尝试了不同的语法(如下所示的示例)但无济于事。转换为 val 没有真正的目的;只是想获得更深入的了解。
package exercises.functions
object CollectVal extends App {
println(List(1,2,3,4,5).collect{case e if e % 2 == 0 => e})
// val onlyEvens: Int = e:Int => Int = e if (e % 2 == 0 ) => e
// val onlyEvens = e:Int = {case e if e % 2 == 0 => e}
println(List(1,2,3,4,5).collect{onlyEvens})
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏谢谢!
你需要表达的是一个函数。所以本例中变量的类型是:
val onlyEvens: Int => Int
Run Code Online (Sandbox Code Playgroud)
特别是,collect接受a PartialFunction(即没有为某些输入值定义的函数)。所以更正确的写法是:
val onlyEvens: PartialFunction[Int, Int] = { case e if e % 2 == 0 => e }
Run Code Online (Sandbox Code Playgroud)
最后,您可以在collect方法中传递这个val:
List(1,2,3,4,5).collect(onlyEvens)
Run Code Online (Sandbox Code Playgroud)