`Unit`返回关闭类型

Kev*_*ith 2 closures scala

鉴于以下关闭:

scala> def foo(x: Int) { 
     |   def bar(y: Int) = x + y
     |   bar(55)
     | }
foo: (x: Int)Unit
Run Code Online (Sandbox Code Playgroud)

为什么它的返回类型Unit?我会期待一个Int.

scala> foo(55)
scala> 
Run Code Online (Sandbox Code Playgroud)

Mic*_*jac 7

您正在使用过程语法.即你没有=方法声明后,所以方法将返回Unit.你想要的是:

scala> def foo(x: Int) = { 
     |     def bar(y: Int) = x + y
     |     bar(55)
     | }
foo: (x: Int)Int
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)