scala:如何将匿名函数转换为 val

use*_*574 1 scala

我是一个学习 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)

任何帮助表示赞赏谢谢!

gia*_*zzi 5

你需要表达的是一个函数。所以本例中变量的类型是:

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)

斯卡斯蒂