Scala - 变量

变量只不过是用于存储值的保留内存位置。 这意味着当您创建一个变量时,您会在内存中保留一些空间。

根据变量的数据类型,编译器分配内存并决定可以在保留内存中存储什么。 因此,通过为变量分配不同的数据类型,您可以在这些变量中存储整数、小数或字符。


变量声明

Scala 有不同的语法来声明变量。 它们可以定义为值,即常量或变量。 在这里,myVar 是使用关键字 var 声明的。 它是一个可以改变值的变量,称为可变变量。 以下是使用 var 关键字定义变量的语法 −

语法

var myVar : String = "Foo"

这里,myVal 是使用关键字 val 声明的。 这意味着它是一个无法更改的变量,称为不可变变量。 以下是使用 val 关键字定义变量的语法 −

语法

val myVal : String = "Foo"

变量数据类型

变量的类型在变量名之后和等号之前指定。 您可以通过提及其数据类型来定义任何类型的 Scala 变量,如下所示 −

语法

val or val VariableName : DataType = [Initial Value]

如果不给变量赋值任何初始值,那么它是有效的,如下所示 −

语法

var myVar :Int;
val myVal :String;

变量类型推断

当您为变量分配初始值时,Scala 编译器可以根据分配给它的值确定变量的类型。 这称为变量类型推断。 因此,您可以像这样编写这些变量声明 −

语法

var myVar = 10;
val myVal = "Hello, Scala!";

这里,默认情况下,myVar 将是 Int 类型,而 myVal 将成为 String 类型变量。


多项作业

Scala 支持多重赋值。 如果代码块或方法返回元组(Tuple − 包含不同类型的对象的集合),则可以将元组分配给 val 变量。 [注意 − 我们将在后续章节中学习元组。]

语法

val (myVar1: Int, myVar2: String) = Pair(40, "Foo")

并且类型推断是正确的 −

语法

val (myVar1, myVar2) = Pair(40, "Foo")

示例程序

下面是一个示例程序,解释了 Scala 中变量声明的过程。 这个程序声明了四个变量——两个变量定义了类型声明,剩下的两个没有类型声明。

示例

object Demo {
   def main(args: Array[String]) {
      var myVar :Int = 10;
      val myVal :String = "Hello Scala with datatype declaration.";
      var myVar1 = 20;
      val myVal1 = "Hello Scala new without datatype declaration.";
      
      println(myVar); println(myVal); println(myVar1); 
      println(myVal1);
   }
}

将上述程序保存在 Demo.scala 中。 以下命令用于编译和执行该程序。

命令

\>scalac Demo.scala
\>scala Demo

输出

10
Hello Scala with datatype declaration.
20
Hello Scala without datatype declaration.

变量作用域

Scala 中的变量可以具有三种不同的作用域,具体取决于使用它们的位置。 它们可以作为字段、方法参数和局部变量存在。 以下是有关每种范围的详细信息。

字段

字段是属于对象的变量。 可以从对象中的每个方法内部访问这些字段。 字段也可以在对象外部访问,具体取决于声明字段的访问修饰符。 对象字段既可以是可变类型,也可以是不可变类型,并且可以使用 var 或 val 定义。

方法参数

方法参数是变量,用于在方法被调用时传递方法内部的值。 方法参数只能从方法内部访问,但传入的对象可以从外部访问,如果您从方法外部引用对象。 方法参数始终是不可变的,由 val 关键字定义。

局部变量

局部变量是在方法中声明的变量。 局部变量只能从方法内部访问,但是如果您从方法中返回它们,您创建的对象可能会转义该方法。 局部变量既可以是可变类型,也可以是不可变类型,可以使用 var 或 val 定义。