什么()在Scala中意味着什么?

Fin*_*son 4 scala

我找到了一个Scala代码片段,它声明了一个方法<init>并放在()调用之下.

我对第5行有疑问.()这里的意思是什么?

(() => {
  final class $anon extends MutableProjection {
    def <init>() = {
      super.<init>();
      ()
    };
    ...
  };
  new $anon()
})
Run Code Online (Sandbox Code Playgroud)

这是一个完整示例的代码.

Chr*_*tin 5

每个Scala函数都有一个返回类型.按照惯例(并且受到某些语言特性的高度鼓励),不需要返回任何内容的函数都有一个名为的返回类型Unit,其中包含一个单独的值().

函数体中的最后一个表达式是其返回值.该作者认为这会()导致编译器推断返回类型应该是Unit.但是用类型注释来做这件事会更加清楚.如果函数的返回类型是Unit,Scala将隐式地()从函数返回,无论正文中的最后一个语句是什么.所以这

def <init>() = {
  super.<init>()
  ()
}
Run Code Online (Sandbox Code Playgroud)

可以写成等价的

def <init>(): Unit = super.<init>()
Run Code Online (Sandbox Code Playgroud)


tri*_*rNZ 5

() 可能意味着一些事情,具体取决于上下文。

作为值,它是一个空元组,或单例类型。它的类型是Unit.

它可以表示不带参数的函数或方法,例如:

def foo() = "Hello world"
Run Code Online (Sandbox Code Playgroud)

请注意,在编写匿名函数时,()is 本身但仍表示没有参数的函数。

val x = () => 2
Run Code Online (Sandbox Code Playgroud)

xis的类型() => Int,一个不带参数并返回一个 int 的函数。

作为无限混乱的根源,您可以获得如下示例:

val y = () => ()
Run Code Online (Sandbox Code Playgroud)

y这里的类型是() => Unit,一个不返回参数的函数,不返回UnitUnit => Unit将被写为val z = (x:Unit) => (),并被调用为z(())

过去,单位与空参数的区别对我来说很尴尬,所以希望能揭开其中的一些神秘面纱。