【发布时间】:2015-11-23 18:31:25
【问题描述】:
鉴于以下闭包:
scala> def foo(x: Int) {
| def bar(y: Int) = x + y
| bar(55)
| }
foo: (x: Int)Unit
为什么它的返回类型是Unit?我会期待一个Int。
scala> foo(55)
scala>
【问题讨论】:
鉴于以下闭包:
scala> def foo(x: Int) {
| def bar(y: Int) = x + y
| bar(55)
| }
foo: (x: Int)Unit
为什么它的返回类型是Unit?我会期待一个Int。
scala> foo(55)
scala>
【问题讨论】:
您正在使用过程语法。即在方法声明之后没有=,因此该方法将返回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