gpt4 book ai didi

scala - Scala 中带和不带 () 的函数参数

转载 作者:行者123 更新时间:2023-12-04 14:46:14 24 4
gpt4 key购买 nike

我正在研究与 Scala in Action 相关的代码示例 http://www.manning.com/raychaudhuri/

引自 https://github.com/nraychaudhuri/scalainaction/blob/master/chap01/LoopTill.scala

// Run with >scala LoopTill.scala  or
// run with the REPL in chap01/ via
// scala> :load LoopTill.scala

object LoopTillExample extends App {
def loopTill(cond: => Boolean)(body: => Unit): Unit = {
if (cond) {
body
loopTill(cond)(body)
}
}

var i = 10
loopTill (i > 0) {
println(i)
i -= 1
}
}

在上面的代码中 cond: => Boolean是我困惑的地方。当我把它改成 cond:() => Boolean它失败了。

有人可以解释我之间有什么不同吗
cond: => Boolean 


cond:() => Boolean 

它们不是都代表函数的参数吗?

最佳答案

我绝不是 scala 专家,所以对我的回答持保留态度。

第一个,cond: => Boolean , 是按名称参数。为简单起见,它本质上是一个元数为 0 的函数的语法糖 - 它是一个函数,但您将其作为变量处理。

第二个,cond: () => Boolean , 是一个显式的函数参数 - 当您引用它而不添加参数时,您实际上并不是在调用该函数,而是在引用它。
在您的代码中,if(cond)不能工作:函数不能用作 bool 值。它的返回值当然可以是,这就是为什么你需要明确地评估它( if(cond()) )。

有大量关于按名称参数的文档,这是 Scala 中一个非常强大的功能,但据我所知,它只能被视为语法糖。

关于scala - Scala 中带和不带 () 的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18608662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com