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 }
的含义是什么?
两个'比较'功能之间有什么区别?
我很困惑。
谢谢。
答案 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。