【发布时间】:2013-05-06 00:06:50
【问题描述】:
我一直在使用 Scala 代码,但遇到了一个我不理解的编译器错误。代码生成一个 Ints 对的向量,然后尝试对其进行过滤。
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)本身是不同的东西。不幸的是,消除这种区别在技术上并不简单。
标签: scala