当前位置: 首页 > 文档资料 > Scala 中文文档 >

变量

优质
小牛编辑
134浏览
2023-12-01

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

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

变量声明 (Variable Declaration)

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

语法 (Syntax)

var myVar : String = "Foo"

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

语法 (Syntax)

val myVal : String = "Foo"

可变数据类型

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

语法 (Syntax)

val or val VariableName : DataType = [Initial Value]

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

语法 (Syntax)

var myVar :Int;
val myVal :String;

变量类型推断

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

语法 (Syntax)

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

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

多项任务

Scala支持多项任务。 如果代码块或方法返回一个元组( Tuple - 保持不同类型的对象的集合),则可以将元组分配给val变量。 [ Note - 我们将在后续章节中学习元组。]

语法 (Syntax)

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

类型推断得到了正确的答案 -

语法 (Syntax)

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

示例程序

以下是解释Scala中变量声明过程的示例程序。 该程序声明了四个变量 - 两个变量用变量声明定义,剩下两个变量没有变量声明。

例子 (Example)

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 。 以下命令用于编译和执行此程序。

Command

\>scalac Demo.scala
\>scala Demo

输出 (Output)

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

可变范围

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

Fields

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

方法参数

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

局部变量

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