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