我想编写一个函数,如果将偶数作为参数给出,则返回true,否则返回false。另外,编写一个函数来过滤只返回偶数的数字列表。全部使用Scala函数编程完成。这就是我所拥有的:
def isEven(n:Int): Boolean = n % 2 == 0
println(isEven(4))
val filterEven = ( xs :List[Int] ) => {
for( x <- xs; if x % 2 == 0 ) yield x
}
println(filterEven(List(3,2,4,5,6,22,91)))
我的问题是,如何将第一个函数“isEven”传递给“filterEven”函数以替换“if-statement”?
问候。
答案 0 :(得分:1)
首先,在传入时给它起一个名字。
val filterEven = (xs :List[Int], filterFunc: Int => Boolean) => {
然后以新名称调用它。
for(x <- xs; if filterFunc(x)) yield x
请注意,现在filterEven
不是您的功能的好名称。以filterFunc
传入的参数将决定您是否过滤偶数,或奇数,或小于100,或......
答案 1 :(得分:1)
您可以将isEven作为参数传递给xs.filter
def filterEven(xs: List[Int]) = xs.filter(isEven)
这在功能上等同于:
def filterEven(xs: List[Int]) = for { x <- xs if isEven(x) } yield x