Scala-functions-call-by-name

提供:Dev Guides
2020年6月23日 (火) 06:56時点におけるMaintenance script (トーク | 投稿記録)による版 (Imported from text file)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

Scala-名前による関数呼び出し

通常、関数のパラメーターは値によるパラメーターです。つまり、パラメーターの値は、関数に渡される前に決定されます。 しかし、関数内で呼び出されるまで評価したくない式をパラメーターとして受け入れる関数を記述する必要がある場合はどうでしょうか。 このような状況のために、Scalaは call-by-name パラメーターを提供しています。

名前による呼び出しメカニズムは、コードブロックを呼び出しに渡し、呼び出しがパラメーターにアクセスするたびに、コードブロックが実行され、値が計算されます。 ここで、delayedはメソッドが入力されたことを示すメッセージを出力します。 次に、delayedはその値とともにメッセージを出力します。 最後に、遅延は「t」を返します。

次のプログラムは、名前による呼び出しを実装する方法を示しています。

object Demo {
   def main(args: Array[String]) {
        delayed(time());
   }

   def time() = {
      println("Getting time in nano seconds")
      System.nanoTime
   }
   def delayed( t: => Long ) = {
      println("In delayed method")
      println("Param: " + t)
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

In delayed method
Getting time in nano seconds
Param: 2027245119786400