English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scalaのインタプリタは、関数の引数(function arguments)を解析する際に2つの方法があります:
値引きコールバック(call-by-value):引数表現の値をまず計算し、関数内部に適用します;
名前付きコールバック(call-by-name):未計算の引数表現を直接関数内部に適用します
関数内部に入る前に、値引きコールバック方式ではすでに引数表現の値が計算されますが、名前付きコールバックは関数内部で引数表現の値を計算します。
これにより、名前付きコールバックを使用するたびに、インタプリタが表現の値を計算することになります。
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("時間を取得します、単位はナノ秒です") System.nanoTime } def delayed(t: => Long) = { println("delayed メソッド内で") println("引数: " + t) t } }
サンプルでは delayed メソッドを宣言しました。 このコードを実行すると、以下のような出力が得られます:
$ scalac Test.scala $ scala Test delayed メソッド内で 時間を取得します、単位はナノ秒です 引数: 241550840475831 時間を取得します、単位はナノ秒です
サンプルでは delay メソッドがこのメソッドにアクセスしたことを示すメッセージを出力し、次に delay メソッドが受け取った値を出力し、最後に t を返します。