请解释一些scala代码 - 初学者

时间:2012-10-03 15:12:11

标签: scala

阅读http://www.scala-lang.org/docu/files/ScalaByExample.pdf

这段代码:

def While (p: => Boolean) (s: => Unit) {
  if (p) { s ; While(p)(s) }
}

给出了这样的解释:

  

While函数将第一个参数作为测试函数,其中   不接受任何参数并产生布尔值。作为第二个参数吧   采用一个命令函数,它也不占用参数并产生一个   类型单位的结果。只要调用命令函数   测试函数产生真实。

if (p)在哪里评估为真或假?

函数s是否应该在某处声明?函数s没有代码?

2 个答案:

答案 0 :(得分:4)

  

if (p)在哪里评估为真或假?

正好在那一行。

ps按名称调用参数,因为它们前面的=>位于方法{{的参数列表中1}}。每次在While的正文中使用他们的名字时,都会对其进行评估。

  

函数While是否应该在某处声明?函数s没有代码?

ss方法的参数,就像While一样。 (为什么你问这个关于p的问题,而不是关于s?)。 Scala中的方法和函数可以有多个参数列表。 p方法有两个参数列表。

通过向While(参数While)和块(参数Boolean)传递一些内容来调用此p方法。

s

在此示例中,var i = 0 While (i < 5) { i = i + 1 println(i) } p,评估为i < 5的函数和Booleans和{{1}之间的块}}

答案 1 :(得分:0)

对于p,您可以使用签名=> Boolean输入任何函数,对于s,您可以输入带有签名=> Unit的任何函数。

所以p是while函数的停止标准。如果您的p函数的评估结果为false,则会突破while循环,如果它是true,那么正文({{1}调用一次s函数,并使用相同的停止标准(while函数)和正文以递归方式调用p函数。