gpt4 book ai didi

scala - Scala 中 def foo = {} 和 def foo() = {} 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 05:56:46 28 4
gpt4 key购买 nike

考虑到以下在 Scala 中定义函数的结构,您能解释一下其中的区别以及含义吗?

def foo = {}

对比

def foo() = {}

更新

感谢您的快速回复。这些都很棒。对我来说唯一剩下的问题是:

如果我省略括号,还有办法传递函数吗?这是我在 repl 中得到的:

scala> def foo = {}
foo: Unit

scala> def baz() = {}
baz: ()Unit

scala> def test(arg: () => Unit) = { arg }
test: (arg: () => Unit)() => Unit

scala> test(foo)
<console>:10: error: type mismatch;
found : Unit
required: () => Unit
test(foo)
^

scala> test(baz)
res1: () => Unit = <function0>
<小时/>

更新 2012-09-14

以下是我注意到的一些类似问题:

  1. Difference between function with parentheses and without
  2. Scala methods with no arguments

最佳答案

如果在定义中包含括号,则可以选择在调用该方法时省略它们。如果您在定义中省略它们,则在调用该方法时将无法使用它们。

scala> def foo() {}
foo: ()Unit

scala> def bar {}
bar: Unit

scala> foo

scala> bar()
<console>:12: error: Unit does not take parameters
bar()
^

此外,您可以对高阶函数执行类似的操作:

scala> def baz(f: () => Unit) {}
baz: (f: () => Unit)Unit

scala> def bat(f: => Unit) {}
bat: (f: => Unit)Unit

scala> baz(foo)

scala> baz(bar)
<console>:13: error: type mismatch;
found : Unit
required: () => Unit
baz(bar)
^
scala> bat(foo)

scala> bat(bar) // both ok

此处 baz 将仅采用 foo() 而不是 bar。这个有什么用,我不知道。但它确实表明类型是不同的。

关于scala - Scala 中 def foo = {} 和 def foo() = {} 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7409502/

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