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

の括弧の欠如を修正すると、あなたが示した例は実際に機能xprintln xます。かっこを入れるだけで、コードが機能します。

ですから、括弧が必要な場合と不要な場合について疑問に思っているかもしれません。幸いなことに、他の誰かがまさにその質問をしました。

于 2009-12-10T21:38:06.223 に答える