变量是保存存储值的内存位置的名称。这意味着当创建变量时,可以在内存中保留一些空间。

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

变量声明

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 = ;
val myVal = "Hello, Scala!";

默认情况下,myVar将会被计算推断为Int类型,myVal将计算推断为String类型变量。

多个赋值

Scala支持多个赋值。如果代码块或方法返回一个元组(Tuple - 保持不同类型的对象的集合),则可以将元组分配给一个val变量。

注:我们将在随后的章节学习元组。

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

类型推断得到正确的类型 -

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

示例程序

以下是一个示例程序,用于说明Scala中变量声明的过程。该程序声明了四个变量 - 两个变量用变量声明定义,其余两个变量没有变量声明。

例子

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

将上述程序保存在源文件:Demo.scala中,使用以下命令用于编译和执行此程序。

D:\software\scala-2.12.\bin>scalac Demo.scala

D:\software\scala-2.12.\bin>scala Demo

Hello Scala with datatype declaration.

Hello Scala new without datatype declaration.

D:\software\scala-2.12.\bin>

变量的作用域

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

字段

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

方法参数

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

局部变量

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

Scala系统学习(四):Scala变量的更多相关文章

  1. Scala系统学习(四):Scala数据类型

    Scala与Java具有相同的数据类型,具有相同的内存占用和精度.以下是提供Scala中可用的所有数据类型的详细信息的表格: 序号 数据类型 说明 1 Byte 8位有符号值,范围从-128至127 ...

  2. Scala系统学习(三):Scala基础语法

    如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...

  3. Scala系统学习(二):Scala开发环境安装配置

    Scala可以安装在任何基于UNIX/Linux或基于Windows的系统上.在您的机器上开始安装Scala之前,必须在计算机上安装Java 1.8或更高版本. 下面请按照以下步骤安装Scala. 步 ...

  4. Scala系统学习(一):Scala概述

    Scala是可扩展语言的缩写,是一种混合功能编程语言. 它由Martin Odersky创建. Scala顺利整合面向对象和函数式语言的功能. Scala被编译后在Java虚拟机上运行. 许多现有公司 ...

  5. Scala - 快速学习01 - Scala简介

    Scala简介 Scala(Scalable Language)是一门多范式(multi-paradigm)编程语言,Scala的设计吸收借鉴了许多种编程语言的思想,具备面向对象编程.函数式编程等特性 ...

  6. Scala系统学习(五):Scala访问修辞符

    本章将介绍Scala访问修饰符.包,类或对象的成员可以使用私有(private)和受保护(protected)的访问修饰符进行标注,如果不使用这两个关键字的其中一个,那么访问将被视为公开(public ...

  7. Java I/O系统学习四:标准IO

    几乎所有学习Java的同学写的第一个程序都是hello world,使用的也都是System.out.println()这条语句来输出"hello world",我也不例外,当初学 ...

  8. Lua学习四----------Lua变量

    © 版权声明:本文为博主原创文章,转载请注明出处 1.Lua变量 - 变量在使用前,必须在代码中进行声明,即创建该变量 - 编译程序执行代码之前编译器需要知道如何给语句变量开辟存储区,用于存储变量的值 ...

  9. Redis系统学习 四、超越数据结构

    5种数据结构组成了Redis的基础,其他没有关联特定数据结构的命令也有很多.我们已经看过一些这样的命令:info,select,flushdb,multi,exec,discard,watch,和ke ...

随机推荐

  1. Esper学习之七:EPL语法(三)

    1.Aggregation 和SQL一样,EPL也有Aggregation,即聚合函数.语法如下: aggregate_function([all|distinct] expression) aggr ...

  2. vue案例 - 使用vue实现自定义多选与单选的答题功能

    4月底立得flag,五月底插上小旗,结果拖到六月底七月初才来执行.说什么工作忙都是借口,就是睡的比猪早,起的比猪晚. 本来实现多选单选这个功能,vue组件中在表单方面提供了一个v-model指令,非常 ...

  3. icon VS html特殊字符

    好久没来了,最近项目很多,今天要说的是个页面上用到的icon. 话“icon” 现在有很多icon库,我们再也不用切图来适配不同的分辨率了,但是对于新手来说,查阅icon库来找到适合的icon,实在费 ...

  4. java(1) 编程基础

    1.classpath 环境变量 * 当java虚拟机需要运行一个类时,会在classpath 环境变量中所定义的路径下寻找所需的class文件 2.java 的基本语法 * java 语言是严格区分 ...

  5. LeetCode 37 Sudoku Solver(求解数独)

    题目链接: https://leetcode.com/problems/sudoku-solver/?tab=Description   Problem : 解决数独问题,给出一个二维数组,将这个数独 ...

  6. CentOS 安装PostregSQL9.2 同时出现pg安装错误

    错误: Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /usr/local/bin ...

  7. Linux渗透之反弹Shell

    前言 当我们在渗透Linux主机时,反弹一个交互的shell是非常有必要的.在搜索引擎上搜索关键字“Linux 反弹shell”,会出现一大堆相关文章,但是其内容不但雷同,而且都仅仅是告诉我们执行这个 ...

  8. [工具] 各种主流 SQLServer 迁移到 MySQL 工具对比

    我之所以会写这篇对比文章,是因为公司新产品研发真实经历过这个痛苦过程(传统基于SQL Server开发的C/S产品转为MySQL云产品). 首次需要数据转换是测试环节,当时为了快速验证新研发云产品性能 ...

  9. iOS取整

    小数向上取整,指小数部分直接进1            x=3.14,ceilf(x)=4 小数向下取整,指直接去掉小数部分          x=3.14,floor(x)=3

  10. ajax无刷新获取天气信息

    浏览器由于安全方面的问题,禁止ajax跨域请求其他网站的数据,但是可以再本地的服务器上获取其他服务器的信息,在通过ajax请求本地服务来实现: <?php header("conten ...