在Play scala html模板中,可以指定
@(title:String)(内容:Html)
或
@(title:String)(content:=> Html)
有什么区别?
答案 0 :(得分:3)
写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
将是一种浪费。我们知道只会执行其中一个表达式,条件为true
或false
。这就是when
和else
定义为'按名称'参数的原因。
Scala课程中解释了这个概念:https://www.coursera.org/course/progfun