scala:如何将匿名函数转换为 val
scala: How to convert an anonymous function to val
我是一名学习 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})
}
感谢任何帮助
谢谢!
你要表达的是一个函数。所以本例中变量的类型是:
val onlyEvens: Int => Int
特别是,collect 接受一个 PartialFunction
(即未为某些输入值定义的函数)。所以更正确的写法是:
val onlyEvens: PartialFunction[Int, Int] = { case e if e % 2 == 0 => e }
最后,你可以在collect方法中传递这个val:
List(1,2,3,4,5).collect(onlyEvens)
将匿名函数分配给 val
的语法如下(注意 e
周围的括号):
val x: Int => Int = (e) => if (e % 2 == 0) e else ???
或等效的,但更短:val x = (e: Int) => if (e % 2 == 0) e else ???
但您要查找的似乎是部分函数,而不仅仅是一个函数。 PartialFunction
就像一个常规函数,但它只是为其参数的一些可能值定义的。在你的情况下,你希望它只为偶数定义:
val x = PartialFunction[Int, Int] { case e if e % 2 == 0 => e }
{ case foo => bar }
shorthand 适用于部分函数但不适用于常规函数,这就是为什么您在尝试以这种方式定义函数时遇到问题。这将创建一个 PartialFunction
,它是为所有匹配 case
子句之一的整数值定义的,而不是为任何其他子句定义的。
我是一名学习 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})
}
感谢任何帮助 谢谢!
你要表达的是一个函数。所以本例中变量的类型是:
val onlyEvens: Int => Int
特别是,collect 接受一个 PartialFunction
(即未为某些输入值定义的函数)。所以更正确的写法是:
val onlyEvens: PartialFunction[Int, Int] = { case e if e % 2 == 0 => e }
最后,你可以在collect方法中传递这个val:
List(1,2,3,4,5).collect(onlyEvens)
将匿名函数分配给 val
的语法如下(注意 e
周围的括号):
val x: Int => Int = (e) => if (e % 2 == 0) e else ???
或等效的,但更短:val x = (e: Int) => if (e % 2 == 0) e else ???
但您要查找的似乎是部分函数,而不仅仅是一个函数。 PartialFunction
就像一个常规函数,但它只是为其参数的一些可能值定义的。在你的情况下,你希望它只为偶数定义:
val x = PartialFunction[Int, Int] { case e if e % 2 == 0 => e }
{ case foo => bar }
shorthand 适用于部分函数但不适用于常规函数,这就是为什么您在尝试以这种方式定义函数时遇到问题。这将创建一个 PartialFunction
,它是为所有匹配 case
子句之一的整数值定义的,而不是为任何其他子句定义的。