【问题标题】:`Unit` Return Type of Closure`Unit` 返回闭包类型
【发布时间】: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 closures


    【解决方案1】:

    您正在使用过程语法。即在方法声明之后没有=,因此该方法将返回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
    
    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2018-06-23
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多