声明没有初始值的变量

Mat*_*t C 11 scala

这个Scala教程有关于声明没有初始值的变量的以下内容:

如果您没有为变量分配任何初始值,则它有效,如下所示:

var myVar :Int;  
val myVal :String;
Run Code Online (Sandbox Code Playgroud)

但是当我在Scala REPL中尝试该代码时,我收到以下错误:

scala> var myVar :Int;
<console>:10: error: only classes can have declared but undefined members
(Note that variables need to be initialized to be defined)
       var myVar :Int;
           ^

scala> val myVal :String;
<console>:10: error: only classes can have declared but undefined members
       val myVal :String;
Run Code Online (Sandbox Code Playgroud)

为什么是这样?是旧版Scala的教程吗?
我找不到本教程编写的Scala的特定版本,但我在OpenJDK 64bit,Java 1.8.0_66上运行Scala版本2.11.7.


  • 教程是否过时,或者是我的环境问题?

  • 是否可以在不初始化的情况下声明变量(var或val)?

Alv*_*sco 27

错误是正确的,您只能在抽象类或特征上执行此操作.本教程可能假设您在抽象类中编写该代码.

可以将变量初始化为某个默认值:

var i: Int = _
var s: String = _
Run Code Online (Sandbox Code Playgroud)

但这基本上与以下相同:

var i: Int = 0
var s: String = null
Run Code Online (Sandbox Code Playgroud)

  • var i: Int = _ 也给了我错误:必须初始化局部变量 (5认同)
  • 这些“默认”值从哪里来?它取决于类型吗?scala 编译器是否定义了“String”等基本类型的默认值? (2认同)