我有这个方法:
def myMethod(value:File,x: (a:File) => Unit) = {
// Some processing here
// More processing
x(value)
}
我知道我可以称之为:
myMethod(new File("c:/"),(x:File) => println(x))
有没有办法可以用支架调用它?类似的东西:
myMethod(new File("c:/"),{ (x:File) =>
if(x.toString.endsWith(".txt")) {
println x
}
})
或者我必须用另一种方法写出来并将其传递给myMethod
?
答案 0 :(得分:7)
函数的正文部分可以是括在括号中的块:
myMethod(new File("c:/"), x => {
if (x.toString.endsWith(".txt")) {
println(x)
}
})
另一种方法是将myMethod定义为curried函数:
def myMethod(value: File)(x: File => Unit) = x(value)
现在您可以编写如下代码:
myMethod(new File("c:/")) { x =>
if (x.toString.endsWith(".txt")) {
println(x)
}
}
答案 1 :(得分:2)
如果您更正x
中println x
周围缺少括号,那么您提供的示例实际上有效。只需加上括号,您的代码即可运行。
所以,现在,您可能想知道什么时候需要括号,什么时候不需要。幸运的是,其他人已经问过that very question。