scala的两种变量类型 var 和 valscala的两种变量类型 var 和 val
在Java中,您可以这样声明新变量:
每个变量声明之前都有其类型。
相比之下,Scala具有两种类型的变量:
· val 创建一个不可变量(例如final在Java中)也就是常量
· var 创建一个可变变量
这是Scala中的变量声明:
这些示例表明,Scala编译器通常很聪明,可以从符号右侧的代码推断出变量的数据类型=。我们说变量的类型是由编译器推断的。如果愿意,还可以显式声明变量类型:
在大多数情况下,编译器不需要查看那些显式类型,但是如果您认为它们使代码更易于阅读,则可以添加它们。
val和var之间的区别
val和之间的区别var是,val使变量不变(就像finalJava中一样),var并使变量可变。由于val字段不能改变,因此有些人将其称为值而不是变量。
REPL显示当您尝试重新分配val字段时会发生什么:
这了 reassignment 是再赋值的意思。
正如预期的那样,此操作失败并显示“ val的重新分配”错误。相反,您可以重新分配var:
在Scala中,一般规则是,val除非有充分的理由不这样做,否则应始终使用字段。这个简单的规则
· (a)使您的代码更像代数。
· (b)帮助您开始进行功能编程,所有字段都是不可变的。
用var来实现hello world
这是带有val字段的“ Hello,world”应用程序的外观:
像之前一样:
· 将该代码保存在名为Hello3.scala的文件中
· 用它编译 scalac Hello3.scala
· 运行它 scala Hello3
关于valREPL中的字段的注释
REPL与在IDE中处理源代码并不完全相同,因此在REPL中您可以做一些事情,而在项目中实际代码时是做不到。
但是您可以val在REPL中重新定义字段,如下所示:
val 字段不能再IDE中重新定义,但是可以在REPL命令行中重新定义。
在Scala中创建新变量时,可以显式声明其类型,如下所示:
但是,通常可以将类型保留为关闭状态,Scala可以为您推断出该类型:
在大多数情况下,当您关闭类型时,代码更易于阅读,因此首选后者。
显式形式感觉很长
例如,在此示例中,数据类型显然是Person,因此无需在表达式的左侧声明该类型:
相比之下,将类型放在变量名称旁边时,代码会感到不必要的冗长:
总之:
需要明确定义类型时使用显式的形式
您想要显示数据类型的地方之一就是您想要清楚自己所创建的内容。
也就是说,如果您未明确声明数据类型,则编译器可能会对要创建的内容做出错误的假设。
基本数据类型
Scala带有您期望的标准数字数据类型。在Scala中,所有这些数据类型都是成熟的对象(不是原始数据类型)。
这些示例说明如何声明基本数据类型的变量:
在第四个例子,如果你没有明确指定类型,数量1将默认为Int,所以如果你想在其他数据类型中的一种- Byte,Long或者Short 你需要显式声明的类型
如图所示,带小数的数字(如2.0)将默认为 Double,因此,如果需要 Float,则需要声明 Float,如上例所示。
因为Int和Double是默认数字类型,所以通常在不显式声明数据类型的情况下创建它们:
REPL显示这些示例默认为Int和Double:
这些数据类型及其范围是:
BigInt和BigDecimal
对于大数,Scala,还包括以下类型BigInt和BigDecimal:
BigInt和BigDecimal为他们支持你们四则所有运算类型:
字符串和字符
Scala还具有String和Char数据类型,通常可以使用隐式形式进行声明:
再次,您可以使用显式形式,如果您愿意的话:
如图所示,将字符串括在双引号中,将字符括在单引号中。