我找到了一个Scala代码片段,它声明了一个方法<init>并放在()调用之下.
我对第5行有疑问.()这里的意思是什么?
(() => {
final class $anon extends MutableProjection {
def <init>() = {
super.<init>();
()
};
...
};
new $anon()
})
Run Code Online (Sandbox Code Playgroud)
这是一个完整示例的代码.
每个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)
() 可能意味着一些事情,具体取决于上下文。
作为值,它是一个空元组,或单例类型。它的类型是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,一个不返回参数的函数,不返回Unit,Unit => Unit将被写为val z = (x:Unit) => (),并被调用为z(())
过去,单位与空参数的区别对我来说很尴尬,所以希望能揭开其中的一些神秘面纱。