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

Scala-注释、标识符、变量与常量-用法详解

Scala

在这里插入图片描述

Scala-变量和数据类型-用法详解

  • Scala
  • 一、注释
  • 二、标识符规范
  • 三、变量和常量
      • 1. 变量(`var`)
      • 2. 常量(`val`)
      • 3. 类型推断与显式声明
      • 4. `var` 和 `val` 的区别
      • 5. Scala与Java对比
      • Tips:
  • 各位看客老爷万福金安,一键三连呀🤣🤣🤣 谢谢啦~

一、注释

Scala中的注释与Java是一样的,熟悉Java的小伙伴可以跳过哈🤣

  • 单行注释:使用 // 来注释一行代码或行尾注释。
  • 多行注释:使用 /**/ 来注释多行代码。
  • 文档注释:使用 /***/,用于生成自动化文档,通常带有特定的格式。

1. 单行注释

// 这是一个单行注释
val x = 5 // 这是一个行尾注释

在这里插入图片描述

// 这是一个表示整数的变量
val number = 10

2. 多行注释

/* 这是一个多行注释可以跨越多行直到遇到结束标记 */
val y = 20

在这里插入图片描述

/*这段注释说明了代码的功能:下面的代码用来计算两个数的和
*/
val a = 5
val b = 3
val sum = a + b

3. 文档注释(注释生成工具)

/** 开始,*/ 结束,生成类似 JavaDoc 的注释。
在这里插入图片描述
在这里插入图片描述


二、标识符规范

  1. 以字母或下划线开头,后接字母、数字、下划线
  • 标识符必须以字母(a-z 或 A-Z)或下划线(_)开头,后续字符可以是字母、数字或下划线。

在这里插入图片描述

  1. 以操作符开头,且只包含操作符(如 +, -, *, /, #, ! 等)

在这里插入图片描述

  • 这种类型的标识符多用于操作符重载、定义自定义的二元运算符或函数。
  • 不应与普通的标识符混淆,因此需要特别注意。
  1. 用反引号(`)包括的任意字符串,即使是 Scala 关键字也可以
  • Scala 允许使用反引号(``)括起来的字符串作为标识符,甚至可以是 Scala 的保留字或关键字(如 val, var, class, def 等)。
  • 可以避免与关键字发生冲突,使其能够作为有效的标识符。
    在这里插入图片描述

Scala 的 39 个关键字如下,它们是保留的语言元素,通常不能作为标识符直接使用(除非用反引号括起来):

  • abstract, case, catch, class, def, do, else, extends, final, finally, for, forSome, if, implicit, import, lazy, match, native, new, null, object, override, package, private, protected, return, sealed, super, this, throw, trait, try, type, val, var, while, with, yield

三、变量和常量

  • 在 Scala 中,变量和常量的定义方式与 Java 有些不同,Scala 语言强调不可变性,推崇函数式编程,因此在处理变量和常量时有一些独特的设计。

1. 变量(var

  • var 是可变变量,用来定义可以改变值的变量。
  • var 定义的变量会自动推断类型,或者你也可以显式指定类型

在这里插入图片描述

显式指定类型,则必须赋一个符合该类型的初始值

在这里插入图片描述

  • Tips:
    • var 声明的变量可以修改其值,适用需要多次修改的情况。

2. 常量(val

  • val 用来定义不可变变量,类似于 Java 中的 final 关键字
  • 一旦为常量赋了值,就不能再修改它。

在这里插入图片描述

显式指定类型,依然不可以修改常量的值:

在这里插入图片描述

  • Tips:
    • val 声明的常量一旦赋值后不能被修改。
    • val 的常量是不可变的,这也让它成为函数式编程中常见的实践方式,因为不可变数据结构有助于避免副作用和并发问题。

3. 类型推断与显式声明

  • Scala 的强大之处在于类型推断🤣🤣🤣,编译器可以根据上下文自动推断变量和常量的类型。

  • 咱们不需要显式声明类型,除非希望指定一个不同的类型。

(1)变量类型推断:

var x = 10  // 编译器推断 x 是 Int 类型
var name = "yushif" // 编译器推断 name 是 String 类型

在这里插入图片描述

(2)常量类型推断:

val pi = 3.14159  // 编译器推断 pi 是 Double 类型
val isScalaFun = true  // 编译器推断 isScalaFun 是 Boolean 类型

在这里插入图片描述

(3)显式指定类型:
如果需要显式指定类型,可以在变量或常量声明时指定类型:

var a: Int = 42
val b: String = "Hello"

4. varval 的区别

  • var(可变变量)

    • 允许修改变量的值。
    • 使用时不需要额外的限制,适合那些可能需要改变值的场景。
      var counter = 0
      counter += 1  // counter 可以修改
      
  • val(常量):(能用常量的地方不用变量

    • 不允许修改已经赋值的常量。声明后不可变。
    • 更符合函数式编程的理念,推荐使用 val 来定义不可变值。
      val name = "Scala"
      // name = "Java"  // 编译错误,不能改变 val 变量的值
      

在函数内部,varval 的行为是一样的:

  • val 用于定义不可变的局部变量。
  • var 用于定义可以改变的局部变量。
def example(): Unit = {val a = 10  // a 是不可变的var b = 20  // b 是可变的b = 30      // 你可以修改 b 的值// a = 15   // 编译错误:无法修改 val 变量println(b)  // 输出 30
}

5. Scala与Java对比

语言关键字变量定义常量定义
Javaintint a = 10;final int b = 20;
Scalavarvar i: Int = 10var i = 10val j: Int = 20val j = 20
  1. 变量与常量定义的关键字

    • 在 Java 中,变量使用 int 等类型直接定义,常量使用 final 关键字。
    • 在 Scala 中,使用 var 定义可变变量,使用 val 定义不可变常量。
  2. 类型推断

    • Java 必须显式指定类型。
    • Scala 支持类型推断,可以省略类型,编译器会自动推断。
  3. 常量的不可变性

    • 在 Java 中,final 常量一旦赋值后不能修改。
    • 在 Scala 中,val 代表常量,赋值后不能再更改。

Tips:

  • 一旦类型被推断,变量的类型是固定的,不允许修改类型。

  • val:声明的变量是不可变的,一旦赋值之后,值不能被修改。类型一旦推断出来,也不能被改变

  • var:声明的变量是可变的,可以修改其值,但类型一旦确定后,不能再修改类型。

    Scala 强制遵守静态类型规则,即在编译时就确定了变量的类型,之后该类型是不可变的。这与动态类型语言(如 Python 或 JavaScript)不同,在那些语言中,可以在运行时修改变量的类型。

    无论是 val 还是 var,一旦 Scala 推断出变量的类型后,该类型就不可再变。不能在后续修改变量的类型(即使是使用 var),只有值才是可以修改的。

var number = 10  // 推断为 Int
// number = "Hello"  // 错误:类型不匹配,Int 类型的变量不能赋值为 String 类型

"Hello" 赋给 number,会报编译错误。


  • 在 Scala 中,推荐尽可能使用不可变的数据结构,因为不可变性使得并发编程更加安全,避免了共享数据带来的潜在问题。
  • val 在这里发挥了重要作用,确保了数据结构一旦创建后不能改变。
//eg.
val list = List(1, 2, 3)
val newList = list :+ 4  // 创建一个新的列表,新列表与原列表不同

各位看客老爷万福金安,一键三连呀🤣🤣🤣 谢谢啦~

相关文章:

Scala-注释、标识符、变量与常量-用法详解

Scala Scala-变量和数据类型-用法详解 Scala一、注释二、标识符规范三、变量和常量1. 变量(var)2. 常量(val)3. 类型推断与显式声明4. var 和 val 的区别5. Scala与Java对比Tips: 各位看客老爷万福金安,一键…...

大数据学习14之Scala面向对象--至简原则

1.类和对象 1.1基本概念 面向对象(Object Oriented)是一种编程思想,面向对象主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想,总体来说面向对象的底层还是面向过程,面向过程抽象…...

docker 安装之 windows安装

文章目录 1: 在Windows安装Docker报19044版本错误的时候,请大家下载4.24.1之前的版本(含4.24.1)2: Desktop-WSL kernel version too low3: docker-compose 安装 (v2.21.0) 1: 在Windows安装Docker报19044版本错误的时候,请大家下载…...

JS 实现游戏流畅移动与按键立即响应

AWSD 按键移动 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box1 {width: 400px;height: 400px;background: yellowgreen;margin: 0 auto;position: relative;}.box2 {width: 50px;height:…...

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…...

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势

随着信息技术的快速发展和数字化时代的到来&#xff0c;安防监控领域也在不断进行技术创新和突破。NVR管理平台EasyNVR作为视频汇聚技术的领先者&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;展现出了在安防监控领域巨大的应用潜力和价值。本文将详细介绍Easy…...

海思3403对RTSP进行目标检测

1.概述 主要功能是调过live555 testRTSPClient 简单封装的rtsp客户端库&#xff0c;拉取RTSP流&#xff0c;然后调过3403的VDEC模块进行解码&#xff0c;送个NPU进行目标检测&#xff0c;输出到hdmi&#xff0c;这样保证了开发没有sensor的时候可以识别其它摄像头的视频流&…...

Vue之插槽(slot)

插槽是vue中的一个非常强大且灵活的功能&#xff0c;在写组件时&#xff0c;可以为组件的使用者预留一些可以自定义内容的占位符。通过插槽&#xff0c;可以极大提高组件的客服用和灵活性。 插槽大体可以分为三类&#xff1a;默认插槽&#xff0c;具名插槽和作用域插槽。 下面…...

分布式服务高可用实现:复制

分布式服务高可用实现&#xff1a;复制 1. 为什么需要复制 我们可以考虑如下问题&#xff1a; 当数据量、读取或写入负载已经超过了当前服务器的处理能力&#xff0c;如何实现负载均衡&#xff1f;希望在单台服务器出现故障时仍能继续工作&#xff0c;这该如何实现&#xff…...

基于yolov8、yolov5的车型检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;车型识别在交通管理、智能监控和车辆管理中起着至关重要的作用&#xff0c;不仅能帮助相关部门快速识别车辆类型&#xff0c;还为自动化交通监控提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的车型识别模型&#xff0c;该模型使用了…...

机器学习—决定下一步做什么

现在已经看到了很多不同的学习算法&#xff0c;包括线性回归、逻辑回归甚至深度学习或神经网络。 关于如何构建机器学习系统的一些建议 假设你已经实现了正则化线性回归来预测房价&#xff0c;所以你有通常的学习算法的成本函数平方误差加上这个正则化项&#xff0c;但是如果…...

Java Optional详解:避免空指针异常的优雅方式

在 Java 编程中&#xff0c;空指针异常&#xff08;NullPointerException&#xff09;一直是困扰开发者的常见问题之一。为了更安全、优雅地处理可能为空的值&#xff0c;Java 8 引入了 Optional 类。Optional 提供了一种函数式的方式来表示一个值可能存在或不存在&#xff0c;…...

SpringBoot开发——整合EasyExcel实现百万级数据导入导出功能

文章目录 一、EasyExcel 框架及特性介绍二、实现步骤1、项目创建及依赖配置(pom.xml)2、项目文件结构3、配置文件(application.yml)4、启动类 Application.java5、配置类 EasyExcelConfig.java6、服务接口定义及实现 ExcelService.java7、控制器类 ExcelController.java8、…...

AcWing 1097 池塘计数 flood fill bfs搜索

代码 #include <bits/stdc.h> using namespace std;const int N 1010, M N * N;typedef pair<int, int> PII;int n, m;char g[N][N]; bool st[N][N]; PII q[M];void bfs (int xx, int yy) {int hh 0, tt -1;q[ tt] {xx, yy};st[xx][yy] true;while (hh <…...

R门 - rust第一课陈天 -内存知识学习笔记

内存 #mermaid-svg-1NFTUW33mcI2cBGB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1NFTUW33mcI2cBGB .error-icon{fill:#552222;}#mermaid-svg-1NFTUW33mcI2cBGB .error-text{fill:#552222;stroke:#552222;}#merm…...

java itext后端生成pdf导出

public CustomApiResult<String> exportPdf(HttpServletRequest request, HttpServletResponse response) throws IOException {// 防止日志记录获取session异常request.getSession();// 设置编码格式response.setContentType("application/pdf;charsetUTF-8")…...

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套&#xff1a;某一个信号正在被处理时&#xff0c;OS会自动block改信号&#xff0c;之后会自动恢复 同理&#xff0c;sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…...

38配置管理工具(如Ansible、Puppet、Chef)

每天五分钟学Linux | 第三十八课&#xff1a;配置管理工具&#xff08;如Ansible、Puppet、Chef&#xff09; 大家好&#xff01;欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中&#xff0c;我们学习了如何安装和配置邮件服务器。今天&#xff0c;我们将探…...

网络技术-定义配置ACL规则的语法和命令

定义ACL&#xff08;访问控制列表&#xff09;规则时&#xff0c;具体命令会根据所使用的设备和操作系统而有所不同。以下是一些常见的设备和操作系统中定义ACL规则的命令示例&#xff1a; 一&#xff1a;思科&#xff08;Cisco&#xff09;路由器/交换机 在思科设备中&#…...

动态规划一>子数组系列

题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int maxSubArray(int[] nums) {int n nums.length;int[] dp new int[n 1];int ret Integer.MIN_VALUE;for(int i 1; i < n; i){dp[i] Math.max(nums[i - 1], dp[i - 1] nums[i - 1]);ret Math.max(…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...