【问题标题】:Explain some scala code please - beginner请解释一些scala代码 - 初学者
【发布时间】:2012-10-03 23:29:45
【问题描述】:

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

这段代码:

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

给出这样的解释:

While 函数的第一个参数是一个测试函数,它 不接受任何参数并产生一个布尔值。作为第二个参数 接受一个命令函数,它也没有参数并产生一个 单元类型的结果。 While 调用命令函数,只要 测试函数的结果为真。

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

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

【问题讨论】:

    标签: scala


    【解决方案1】:

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

    就在那一行。

    pscall-by-name 参数,因为While 方法的参数列表中它们前面的=>。每次在While 的正文中使用他们的名字时,都会对他们进行评估。

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

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

    您调用这个While 方法,方法是向它传递一些计算结果为Boolean(参数p)和一个块(参数s)。

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

    在此示例中,pi &lt; 5,一个计算结果为 Boolean 的函数,s{} 之间的块。

    【讨论】:

      【解决方案2】:

      对于p,您可以输入任何带有=&gt; Boolean 签名的函数,对于s,您可以输入带有签名=&gt; Unit 的任何函数。

      所以p 是while 函数的停止条件。如果您的p 函数计算结果为false,则它会跳出while 循环,如果它是true,则bodys 函数)被调用一次并且@ 987654331@ 函数以相同的停止标准(p 函数)和主体再次递归调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-12
        • 1970-01-01
        • 2019-05-16
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 2017-06-27
        相关资源
        最近更新 更多