2

Play scala htmlテンプレートでは、次のように指定できます

@(タイトル:文字列)(コンテンツ:HTML)

また

@(タイトル:文字列)(コンテンツ:=> Html)

違いはなんですか?

4

1 に答える 1

5

書き込みparameter: => Htmlは「名前パラメータ」と呼ばれます。

例:

def x = {
  println("executing x")
  1 + 2
}

def y(x:Int) = {
  println("in method y")
  println("value of x: " + x)
}

def z(x: => Int) = {
  println("in method z")
  println("value of x: " + x)
}

y(x)
//results in:
//executing x
//in method y
//value of x: 3

z(x)
//results in:
//in method z
//executing x
//value of x: 3

名前によるパラメーターは、使用時に実行されます。これに伴う問題は、それらが複数回評価される可能性があることです。

良い例はifステートメントです。次のような方法だったとしましょう。

def if(condition:Boolean, then: => String, else: => String)

メソッドを実行する前に、両方thenを評価するのは無駄です。else実行される式は1つだけで、条件はまたはのいずれtruefalseです。それが理由whenでありelse、「名前による」パラメータとして定義されています。

この概念はScalaコースで説明されています:https ://www.coursera.org/course/progfun

于 2013-02-08T07:56:40.677 に答える