`Unit` Return 闭包类型

`Unit` Return Type of Closure

给定以下闭包:

scala> def foo(x: Int) { 
     |   def bar(y: Int) = x + y
     |   bar(55)
     | }
foo: (x: Int)Unit

为什么它的return类型是Unit?我本来希望 Int.

scala> foo(55)
scala> 

您正在使用过程语法。也就是说,方法声明后没有 =,因此该方法将 return Unit。你想要的是:

scala> def foo(x: Int) = { 
     |     def bar(y: Int) = x + y
     |     bar(55)
     | }
foo: (x: Int)Int

您的示例中 bar(55) 的值被丢弃,您可以通过编译器标志捕获该值:

$ scala -Ywarn-value-discard

scala> def foo(x: Int) { 
     |     def bar(y: Int) = x + y
     |     bar(55)
     | }
<console>:9: warning: discarded non-Unit value
           bar(55)
              ^
foo: (x: Int)Unit