scala冒号右箭头键vs仅冒号

时间:2013-02-08 00:14:19

标签: scala playframework-2.0

在Play scala html模板中,可以指定

  

@(title:String)(内容:Html)

  

@(title:String)(content:=> Html)

有什么区别?

1 个答案:

答案 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)

在执行方法之前评估thenelse将是一种浪费。我们知道只会执行其中一个表达式,条件为truefalse。这就是whenelse定义为'按名称'参数的原因。

Scala课程中解释了这个概念:https://www.coursera.org/course/progfun