3

私はval

val something = System.nanoTime

次に、一連のメソッド呼び出しを実行します。

foo(something) {
  bar(something, 2) { etc }
}

val実際に何かを行う最後の方法まで解決を延期したいと思います。私はscalaの修飾子を知っていますが、変数がそのメソッド内で使用されているかどうかに関係なく、パラメーターとしてlazy渡すとその値が自動的に解決されるようです。something

これまでの私の(やや醜い)解決策は次のとおりです。

val something = () => System.nanoTime

これは機能しますが、すべてのメソッドシグネチャ(この場合はから)を変更する必要がありLongます() => Long。もっとエレガントな解決方法があるのではないかと思いますが、皆さんはどう思いますか?

4

1 に答える 1

6

署名を変更せずにこれを行うことはできませんが、のx: => Long代わりにを使用する必要がありx: () => Longます。1つ目はいわゆるby name parameterです。名前によるパラメーターは、呼び出すたびに評価されます。したがって、全体としては次のようになります。

def foo(x: => Long) = {
  x + 12 // x will be evaluated here
}

lazy val x = 12L
foo(x)
于 2012-09-12T15:23:42.823 に答える