Bob*_*les 0 lambda functional-programming scala set scala-placeholder-syntax
我有以下代码,它应该搜索数组并查看是否与第二个参数匹配.
def any(check: Set[Any], expr: Boolean): Boolean = {
var checked = check.filter(_ => expr)
if (checked == Set())
return false
else
return true
}
Run Code Online (Sandbox Code Playgroud)
它应该被称为这样:
any(Set(3, 4, 5, 6), _ > 5)
但是当我打电话给它时:
error: missing parameter type for expanded function ((x$1) => x$1.$greater(5))
Run Code Online (Sandbox Code Playgroud)
我对函数式语言和Scala的经验很少,所以,请给我一个彻底的解释,说明发生了什么以及如何解决它!
问题是您评估表达式的时间之一.在你的电话里
check.filter(_ => expr)
Run Code Online (Sandbox Code Playgroud)
你是check通过传入的表达式的值来过滤的.但是在你的调用中,你传递的是一个函数,而不是一个布尔值.
我认为你的意思是通过这个功能,然后在你的check通话中评估它.例如:
def any[T](check: Set[T], test: T => Boolean): Boolean = {
var checked = check.filter(test)
if (checked == Set())
return false
else
return true
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样调用如下:
any(Set(3, 4, 5, 6), (_:Int) > 5)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |