1

私はmetrics-scalaライブラリを使用していますが、以下の2つの呼び出しが完全に異なる動作をする理由を理解できません

// method 1
writeTimer.time(() => {
  // expensive operation
})

// method 2
writeTimer.time {
  // expensive operation
}

方法1の場合、コストのかかる操作が呼び出されることはありませんが、方法2の場合は呼び出されます。

writeTimerはのインスタンスでcom.yammer.metrics.Timerあり、timeメソッドは次のように宣言されています。

/**
 * Runs f, recording its duration, and returns the result of f.
 */
def time[A](f: => A): A

コードのバグを解決したところ、メソッド2を使用して機能させる必要がありました。

4

1 に答える 1

8

最初のケースでは、高価な操作を計算する関数を宣言する操作のタイミングを計っているように見えます。2番目のケースでは、実際に高価な操作自体のタイミングを計っています。

于 2012-05-23T18:11:45.743 に答える