当前位置: 首页 > news >正文

scala基础学习_变量

文章目录

  • scala中的变量
    • 常量 val(不可变变量)
    • 变量 var
    • 变量声明
      • 多变量声明
      • 匿名变量 _ 声明
    • 变量类型声明
    • 变量命名规范

scala中的变量

常量 val(不可变变量)

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

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

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

变量 var

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

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

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

变量声明

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

多变量声明

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

val a, b, c = 1  // a, b, c 都被赋值为 1

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

var (x, y, z) = (10, 20, "world")

匹配声明

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

匿名变量 _ 声明

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

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

变量类型声明

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

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

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

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

显式类型声明

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

类型推断

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
http://www.lryc.cn/news/503780.html

相关文章:

  • Java 身份证校验工具类(15位校验、18位校验与15转18)
  • HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)
  • HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由
  • 音频客观测评方法PESQ
  • 前后端分离的项目使用nginx 解决 Invalid CORS request
  • 回归预测 | MATLAB实现SVM-Adaboost集成学习结合支持向量机多输入单输出回归预测
  • 常见排序算法总结 (五) - 堆排序与堆操作
  • kubernetes的三种探针ReadinessProbe、LivenessProbe和StartupProbe,以及使用示例
  • 掌握线性回归:从简单模型到多项式模型的综合指南
  • Java:183 基于SSM的高校食堂系统
  • 光谱相机
  • AI绘图:开源Stable Diffusion 3 ComfyUI下载安装方法
  • 一区向量加权算法优化INFO-CNN-SVM卷积神经网络结合支持向量机多特征分类预测
  • AES笔记整理
  • Jmeter 性能压测-Tomcat连接数
  • 基于Vue3的组件封装技巧分享
  • python中r代表什么意思
  • 《量子计算对人工智能发展的深远影响》
  • 12.2【JAVA EXP4]next.js的各种问题,DEBUG,前端补强,前后端交互,springSecurity ,java 配置,h2数据库
  • docker启动一个helloworld(公司内网服务器)
  • 使用 Netty 实现 RPC 通信框架
  • 【机器学习06--贝叶斯分类器】
  • 创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
  • [146 LRU缓存](https://leetcode.cn/problems/lru-cache/)
  • 【Java Nio Netty】基于TCP的简单Netty自定义协议实现(万字,全篇例子)
  • 【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis
  • pdb调试器详解
  • 项目15:简易扫雷--- 《跟着小王学Python·新手》
  • Flink CDC实时同步mysql数据