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

Scala中带()和不带()的函数参数,scala,Scala,我在《Action book》中介绍了与Scala相关的代码示例 引用 在上面的代码中,cond:=>Boolean是我感到困惑的地方。当我将其更改为cond:()=>Boolean时,它失败了 有人能解释一下他们之间的区别吗 cond: => Boolean 及 它们不是都代表函数的参数吗?我绝对不是scala专家,所以请对我的答案持保留态度 第一个参数,cond:=>Boolean,是一个按名称参数。为了简单起见,它本质上是一个arity为0的函数的语法糖-它是一个函数,但你把它当

我在《Action book》中介绍了与Scala相关的代码示例

引用

在上面的代码中,
cond:=>Boolean
是我感到困惑的地方。当我将其更改为
cond:()=>Boolean时,它失败了

有人能解释一下他们之间的区别吗

cond: => Boolean 


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

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

第一个参数,
cond:=>Boolean
,是一个按名称参数。为了简单起见,它本质上是一个arity为0的函数的语法糖-它是一个函数,但你把它当作一个变量来处理

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


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

参见。它们基本相同。它们都编译为函数0[Boolean]。唯一的区别是,按名称调用(cond:=>Boolean)要短一些,因为不需要编写loopTill(()=>i>0)(…)
cond: => Boolean 
cond:() => Boolean