Scala:为什么在声明期间需要为var/val赋值

Stu*_*Cat 20 scala declaration

除非我做错了.我们似乎无法做到这样的事情:

var x;
x = 1;
Run Code Online (Sandbox Code Playgroud)

在Scala中,但您必须声明并为其赋值.为什么会出现这种情况有什么理由吗?

r.v*_*r.v 27

显而易见的原因是不要让变量未初始化.请注意,在没有初始化的声明中,您还需要指定类型.

var x: Type;
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

只有类可以声明但未定义的成员(注意,变量需要初始化才能定义)

实际上只有抽象类可以在不定义成员的情况下声明成员.您仍然可以获得所需的行为(变量初始化为默认值)

var x: Type = _
Run Code Online (Sandbox Code Playgroud)

如果Type是引用类型,x将是null.例如,在工厂方法在对象构造之后完成对象的初始化的情况下,此方案很有用.