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 定义。