【问题标题】:scala: 'def foo = {1}' vs 'def foo {1}'scala: 'def foo = {1}' vs 'def foo {1}'
【发布时间】:2009-11-02 15:06:38
【问题描述】:

在每种定义 foo 的形式中发生了什么?:

scala> def foo = {1}
foo: Int

scala> foo
res2: Int = 1

但是:

scala> def foo {1}
foo: Unit

scala> foo

scala>

【问题讨论】:

标签: scala methods


【解决方案1】:

另请参阅 SO:this question and answer

在 Scala 中,如果方法声明的主体前没有等号,编译器会推断结果类型将是Unit

基本上声明一个没有=的函数意味着该函数返回Unit,编译器在最后为你插入一个()。应该返回非Unit 值的函数必须= 表示法声明(当然编译器可以从表达式的类型推断返回类型)。

【讨论】:

    【解决方案2】:

    http://anyall.org/scalacheat/

    //[bad!] 
    def f(x: Int) { x*x } //hidden error: without = it's a Unit-returning proc; causes havoc 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-25
      • 2011-03-26
      • 1970-01-01
      • 2022-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      相关资源
      最近更新 更多