阅读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
没有代码?
答案 0 :(得分:4)
if (p)
在哪里评估为真或假?
正好在那一行。
p
和s
是按名称调用参数,因为它们前面的=>
位于方法{{的参数列表中1}}。每次在While
的正文中使用他们的名字时,都会对其进行评估。
函数
While
是否应该在某处声明?函数s
没有代码?
s
是s
方法的参数,就像While
一样。 (为什么你问这个关于p
的问题,而不是关于s
?)。 Scala中的方法和函数可以有多个参数列表。 p
方法有两个参数列表。
通过向While
(参数While
)和块(参数Boolean
)传递一些内容来调用此p
方法。
s
在此示例中,var i = 0
While (i < 5) {
i = i + 1
println(i)
}
为p
,评估为i < 5
的函数和Boolean
是s
和{{1}之间的块}}
答案 1 :(得分:0)
对于p
,您可以使用签名=> Boolean
输入任何函数,对于s
,您可以输入带有签名=> Unit
的任何函数。
所以p
是while函数的停止标准。如果您的p
函数的评估结果为false
,则会突破while
循环,如果它是true
,那么正文({{1}调用一次s
函数,并使用相同的停止标准(while
函数)和正文以递归方式调用p
函数。