scala基础学习_变量

文章目录

scala中的变量

常量 val(不可变变量)

使用val关键字声明变量是不可变的,一旦赋值后不能被修改

对于 val 类型的变量,一旦它被初始化,它所指向的内存地址就不会改变(尽管该地址中的值可能会改变,如果它引用的是一个可变对象)。

scala 复制代码
val name = "Alice"
val name = "Bob"  // 这行代码会导致编译错误,因为 name 是不可变的

变量 var

使用 var 关键字声明的变量是可变的,可以在其生命周期内被重新赋值。然它的值可以被重新赋值,但它的类型仍然是固定的

对于 var 类型的变量,其引用的内存地址可以改变 ,这意味着你可以将 var 变量重新赋值为不同的值,这些值可能会存储在不同的内存地址中。

scala 复制代码
var age = 25
age = 26  // 这行代码是合法的,因为 age 是可变的

变量声明

在 Scala 中,使用 var 关键字声明的变量确实是可变的,这意味着你可以在变量的生命周期内多次改变它的值。然而,这并不意味着你可以多次声明同一个变量。一旦一个变量被声明,就不能在同一作用域内再次声明它,无论它是 var 还是 val

多变量声明

你可以在一行代码中声明多个变量,使用逗号分隔:

scala 复制代码
val a, b, c = 1  // a, b, c 都被赋值为 1

使用元组进行声明(解包)

scala 复制代码
var (x, y, z) = (10, 20, "world")

匹配声明

scala 复制代码
val tuple = (1, 2.0, "three")
tuple match {
  case (x: Int, y: Double, z: String) => println(s"x=$x, y=$y, z=$z")
}

匿名变量 _ 声明

在匿名函数和模式匹配中,你可以使用 _ 作为匿名变量或占位符。

scala 复制代码
val numbers = List(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter(_ % 2 == 0)  // _ 代表当前元素

变量类型声明

在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。

所以,如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。

  • 显式类型声明:明确指定变量的类型。
  • 类型推断:省略类型声明,由编译器推断类型。

在 Scala 中,如果你不显式地指定变量的类型,编译器会尝试根据变量的初始值推断其类型。这种类型推断机制确实可以让你编写更简洁的代码。然而,一旦变量的类型被推断出来,它就不能再改变以接受不同类型的值

显式类型声明

scala 复制代码
object ListData {
  def main(args:Array[String]):Unit={
    val lst: List[Any] = List(1,2,3,5)
    val str1: String = "helllo"
  }
}

类型推断

scala 复制代码
object ListData {
  def main(args:Array[String]):Unit={
    val lst = List(1,2,3,5)
    val str1= "helllo"
  }
}

变量命名规范

  • 变量名必须以字母(A-Z 或 a-z)或下划线(_)开头。
  • 尽量不要使用以下划线开头的变量名,这通常用于标识内部或私有变量。
  • 变量名不能是Scala的关键字。
  • 驼峰命名:myVariableName, userAge, accountBalance
相关推荐
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
2303_Alpha2 天前
SpringBoot
笔记·学习
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
萘柰奈2 天前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽2 天前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫2 天前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
每天回答3个问题2 天前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
伍哥的传说2 天前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
向阳花开_miemie2 天前
Android音频学习(十八)——混音流程
学习·音视频