3

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

这段代码:

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

给出了这样的解释:

While 函数将一个测试函数作为第一个参数,该函数不接受任何参数并产生一个布尔值。作为第二个参数,它接受一个命令函数,该函数也不接受任何参数并产生 Unit 类型的结果。只要测试函数为真,就会调用命令函数。

在哪里被if (p)评估为 true 或 false ?

该函数s不应该在某处声明吗?函数没有代码s

4

2 回答 2

4

在哪里被if (p)评估为 true 或 false ?

就在那里,在那一行。

p并且s按名称调用的参数,因为=>在方法的参数列表中它们前面While。每次在 的正文中使用它们的名称时While,都会对它们进行评估。

该函数s不应该在某处声明吗?函数没有代码s

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

您可以通过将计算结果为(参数)和块(参数)While的内容传递给此方法来调用此方法。Booleanps

var i = 0
While (i < 5) {
  i = i + 1
  println(i)
}

在这个例子p中是i < 5,一个计算结果为 a 的函数Boolean,并且是和s之间的块。{}

于 2012-10-03T15:21:39.697 回答
0

因为p你可以输入任何带有签名的函数=> Boolean,因为s你可以输入任何带有签名的函数=> Unit

pwhile 函数的停止标准也是如此。如果您的p函数评估为false它会跳出while循环,如果它是true,则调用主体s函数)一次,然后while使用相同的停止条件(p函数)和主体递归地再次调用该函数。

于 2012-10-03T15:25:00.053 回答