为什么不直接设置值

Fre*_*ind 7 scala variable-assignment

我正在阅读项目的来源,并在那里找到了这样的代码:

private var _responded: Boolean = _
{
    _responded = false
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么他这样写,不是一样的:

private var _responded = false
Run Code Online (Sandbox Code Playgroud)

他们之间有什么区别?

Ngo*_*Dao 7

我是该代码的作者.

像这样写:

private var _responded = false
Run Code Online (Sandbox Code Playgroud)

在编译时导致此警告(对于Scala的旧版本,Scala 2.9似乎没有问题):

the initialization is no longer be executed before the superclass is called
Run Code Online (Sandbox Code Playgroud)

您可以谷歌搜索该警告以查找更多信息.


Kev*_*ght 6

我想冒这个猜测,但这看起来很像intellij自动Java到Scala转换生成的代码.

这个转换器试图尽可能地保持原始Java的语义,因此倾向于产生非常惯用的代码,以及许多嵌套的作用域和可变变量.