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

字段

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

方法参数

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

局部变量

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