我一直在玩Scala代码,并遇到了一个编译器错误,我不明白。该代码生成一对Ints对的向量,然后尝试对其进行过滤。Scala:定义一个函数是正确的类型
val L = for (x <- (1 to 5)) yield (x, x * x)
val f = (x: Int, y: Int) => x > 3
println(L.filter(f))
编译器抱怨试图用f
作为参数为filter
方法与编译器错误消息是:
error: type mismatch;
found : (Int, Int) => Boolean
required: ((Int, Int)) => Boolean
如何定义功能f
正确,以满足所需的功能类型?我尝试添加周围(x: Int, y: Int)
额外的括号,但是这给了:
error: not a legal formal parameter
val f = ((x: Int, y: Int)) => x > 3
^
这个问题是去除参数列表和元组之间的区别的争论。也就是说,现在,'f(x,y)'中的'(x,y)'是一种与裸露的'(x,y)'本身不同的东西。不幸的是,消除这种区别在技术上并不重要。 –