1

我有这个方法:

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

4

2 回答 2

7

函数的主体部分可以是用大括号括起来的块:

myMethod(new File("c:/"), x => { 
  if (x.toString.endsWith(".txt")) {
    println(x) 
  }
})

另一种方法是将 myMethod 定义为柯里化函数:

def myMethod(value: File)(x: File => Unit) = x(value)

现在您可以编写如下代码:

myMethod(new File("c:/")) { x => 
  if (x.toString.endsWith(".txt")) {
    println(x) 
  }
}
于 2009-12-10T20:36:06.550 回答
2

x如果您更正in周围缺少括号,您给出的示例实际上有效println x。只需加上括号,您的代码就可以工作。

所以,现在,你可能想知道什么时候需要括号,什么时候不需要。幸运的是,有人问了这个问题

于 2009-12-10T21:38:06.223 回答