Scala中的这个定义意味着什么?

时间:2014-01-13 12:38:32

标签: scala

scala> def judge(func: ()=> Boolean) {
     |   val result = func()
     |   println(result)
     | }
judge: (func: () => Boolean)Unit

scala> def compare = { 6 > 4 }
compare: Boolean

scala> judge(compare)
<console>:10: error: type mismatch;
 found   : Boolean
 required: () => Boolean
              judge(compare)
                    ^

scala> def compare() = { 6 > 4 }
compare: ()Boolean

scala> judge(compare)
true

def compare() = { 6 > 4 }的含义是什么? 两个'比较'功能之间有什么区别? 我很困惑。

谢谢。

2 个答案:

答案 0 :(得分:2)

def compare = { 6 > 4 }

表示您创建比较6和4的函数并返回布尔值(True)。

这就是所谓的 0-arity 方法。

可以使用或不使用括号()来定义0-arity的Scala方法。这用于向用户发出该方法具有某种副作用的信号(如打印输出或销毁数据)。

如果在定义中包含括号,则可以在调用方法时将其省略。

另请参阅Programming in Scala

  

这种无参数的方法在Scala中很常见。相比之下,使用空括号定义的方法(例如def height():Int)称为empty-paren方法。建议的约定是在没有参数时使用无参数方法,并且该方法仅通过读取包含对象的字段来访问可变状态(特别是,它不会改变可变状态)。

     

该惯例支持统一访问原则[...]

     

总而言之,鼓励Scala中的样式定义不带参数且没有副作用的方法作为无参数方法,即省略空括号。另一方面,您永远不应该定义一个没有括号的副作用的方法,因为那个方法的调用看起来像一个字段选择。

您可以在此处找到有关此主题的其他信息:

答案 1 :(得分:0)

函数始终返回true。