4

1つはオプションですが、括弧なしで呼び出す2つの名前による呼び出しパラメーターを持つメソッドが必要です。したがって、次のいずれかを実行できます。

transaction { ... }

また

transaction { ... } { ... }

私は試しました(そして解決しました):

def transaction(body: => Unit) { transaction(body, {}) }
def transaction(body: => Unit, err: => Unit) { ... } // Works by transaction({ ... },{ ... })

これはどうやら(理由はわかりませんが)次とは異なります。

def transaction(body: => Unit, err: => Unit = {}) { ... }

そして、私が望んでいたものは機能します(ただし、最初のパラメーターリストが同じであるため、機能しないと思います)。

def transaction(body: => Unit) { transaction(body)() }
def transaction(body: => Unit)(err: => Unit) { ... }

オプションの 2 番目の名前による呼び出しパラメーターの概念をどのように使用しますか?

4

1 に答える 1

0

これは、デフォルトのパラメータがどのように機能するかと関係があります。知らせ:

scala> def f(x:Int = 5) = println(x)
f: (x: Int)Unit

scala> f
<console>:9: error: missing arguments for method f in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
              f
              ^

scala> f()
5

デフォルトのパラメータを持つメソッドでは、常に()を呼び出す必要があります。

したがって、2つのパラメータリストとデフォルトのパラメータを使用する場合は、次のようにする必要があります。

scala> def transaction(body: => Unit)(err: => Unit = { println("defult err")}) { body; err; }
transaction: (body: => Unit)(err: => Unit)Unit

scala> transaction { println("body") } 
<console>:9: error: missing arguments for method transaction in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
              transaction { println("body") } 

scala> transaction { println("body") } ()
body
defult err
于 2012-07-05T15:32:55.167 に答える