Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
()在Scala中是什么意思?_Scala - Fatal编程技术网

()在Scala中是什么意思?

()在Scala中是什么意思?,scala,Scala,我发现了一个Scala代码片段,它声明了一个方法,并将()放在调用的正下方 我有一个关于5号线的问题。这里的()是什么意思 (() => { final class $anon extends MutableProjection { def <init>() = { super.<init>(); () }; ... }; new $anon() }) (()=>{ 最后一个类$anon扩展了可变投影{

我发现了一个Scala代码片段,它声明了一个方法
,并将
()
放在调用的正下方

我有一个关于5号线的问题。这里的
()
是什么意思

(() => {
  final class $anon extends MutableProjection {
    def <init>() = {
      super.<init>();
      ()
    };
    ...
  };
  new $anon()
})
(()=>{
最后一个类$anon扩展了可变投影{
def()={
超级(;
()
};
...
};
新$anon()
})

下面是一个完整的示例。

每个Scala函数都有一个返回类型。按照惯例(一些语言特性非常鼓励),不需要返回任何内容的函数有一个名为
Unit
的返回类型,它的单例值写为
()

函数体中的最后一个表达式是其返回值。作者将其设置为
()
,以使编译器推断返回类型应为
Unit
。但是,如果只使用类型注释就可以更清楚地做到这一点。如果函数的返回类型为
Unit
,则Scala将从函数隐式返回
()
,而不管函数体中的最后一条语句是什么。那么这个

def <init>() = {
  super.<init>()
  ()
}
def()={
超级
()
}
可等效为

def <init>(): Unit = super.<init>()
def():单位=super.()
()
可以满足一些要求,具体取决于上下文

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

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

def foo() = "Hello world"
请注意,在编写匿名函数时,
()
本身就是一个函数,但它仍然表示没有参数的函数

val x = () => 2
x
的类型是
()=>Int
,这是一个不带参数并返回Int的函数

作为无限困惑的来源,您可以得到如下示例:

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


过去,单位与空参数的区别对我来说很尴尬,希望能解开其中的一些谜团。

知道为什么需要调用它吗?这样做的目的是什么?您问题中的代码以及您链接到的代码不是合法的Scala代码。它是Scala编译器内部使用的中间语言。这当然与Scala类似,但如果您试图通过查看这一点来了解Scala的内容,您可能会感到非常困惑。好的,那么最佳实践是什么:指定返回类型(
:Unit
)还是只返回
()
?我不愿意在没有任何引用的情况下声明“最佳实践”,但是我想不出任何理由愿意显式地包含
()
值。您链接的示例看起来像是生成的代码或其他东西,所以我不这么认为。“这个名为Unit的单例值,为了简洁起见,也可以写成()”
Unit
只是类型的名称,该值只能写成
()
Unit
值就是这种类型的companion对象。啊,我还以为companion就是实例呢。正在修复我的答案。@user3552363类型可以任意写入,值不能。
(x:Unit)=>()
。。。一种扭曲:)