[英]why = is optional in def in Scala
以下两个函数定义都可以编译,即使其中一个使用=
且另一个不使用。 为什么? 这种行为有优势吗?
定义1
def doWork(index:Int) = {
sleep((math.random*1000).toLong);
index;
}
定义2
def doWork(index:Int) {
sleep((math.random*1000).toLong);
index;
}
def 1是您要使用的。
def 2被称为过程语法(不推荐使用),其实际含义是:
def doWork(index:Int): Unit = {
sleep((math.random*1000).toLong)
index
}
所以现在可能正是您想要的(因为它不返回任何内容)。
当您在def中不使用"="
时,表示您定义的函数将返回unit。
在第二个函数中,您不必使用"="
,这意味着已定义的函数将返回单位,但您的函数将返回索引。 这就是为什么它按预期单位抛出警告并丢弃该值的原因。
谢谢
不包括=
声明一个过程 。 过程返回Unit
,即根本不返回任何值。 如Scala语言规范中所述(来自上面的链接):
过程定义是一个函数定义,其中省略了结果类型和等号。 它的定义表达式必须是一个块。 例如,
def f(ps) {stats}
等同于def f(ps): Unit = {stats}
。
在第二种情况下,简单地抑制了返回值,将返回Int
的函数转换为返回Unit
的过程。 这样做时,编译器应发出类似于以下内容的警告
warning: a pure expression does nothing in a statement position
这应该让您知道发生了一些麻烦,例如,存在一条语句,该语句通常会导致该块返回一个值(在您的情况下为index;
),但未使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.