scala表达式

1.8 表达式(重点)
| # 语句(statement): | 一段可执行的代码 |
| # 表达式(expression): | 一段可以被求值的代码,在Scala中一切都是表达式 |
- 表达式一般是一个语句块,可包含一条或者多条语句,多条语句使用“{}”包含,语句间以“;”分隔,称为块表达式
- 表达式有返回值
表达式和语句有什么区别:
1.表达式有返回值,语句被执行。表达式一般是一个语句块,执行后,返回一个值
scala> if(true) "true string" else "false string"
res4: String = true string
scala> if(false) 5 else "hello"
res5: Any = hello
2.不使用return语句,最后一个表达式即返回值
scala> var i=0 //可以认为是var i={0}
i: Int = 0
scala> val a={ i=i+1 } //块表达式中最后一条赋值语句返回了"()"值,它是一个Unit类型
a: Unit = ()
scala> val a={ i=i+1;i=i+1;i } //块表达式中最后一条语句返回i的值作为表达式的值
a: Int = 2
如果用return会发生什么?
scala> if (i>10) 100 else -100
scala> if (i>10) return 100 else return -100
<console>:9: error: return outside method definitionif (i>10) return 100 else return -100
1.8.1 if分支条件表达式
if-else表达式有值,这个值就是跟在if或者else之后的表达式的值。
1.单分支
基本语法
if (条件表达式) {执行代码块}
说明:当条件表达式为ture 时,就会执行 { } 的代码。
val x = 1
//如果缺失else,相当于if(x>2) 1 else ()
//返回类型是AnyVal
//如果进行类型判断和转换,可以使用:
//var b = if(m.isInstanceOf[Int]) m.asInstanceOf[Int] else 0
val m = if(x>2) 1
println(m)
//在scala中,每个表达式都有值,scala中有个unit类,写作(),相当于Java中的 void
val n = if(x>2) 1 else ()
println(n)
2.双分支
基本语法
if (条件表达式) {执行代码块1 } else { 执行代码块2 }
说明:当条件表达式成立,即执行代码块1,否则执行代码块2.
var x = 1 //将if/else表达式值赋给变量y val y = if (x > 0 ) 1 else -1 println(y)
3.多分支
基本语法
if (条件表达式1) { 执行代码块1 }
else if (条件表达式2) { 执行代码块2 }
……
else {执行代码块n }
示例:
//if 嵌套 val k= if(x<0) 0 else if (x>=1) 1 else -1 println(k)
混合类型表达式
//支持混合型表达式 //返回类型是Any val z = if(x>0) "success" else -1 println(z)
代码
package com.qianfeng.scala
/*** 代码块* 1、代码块中最后一行的值作为返回值;如果最后一行为print()、赋值等语句则返回()* 2、所有代码中最后一行无需加retur语句就可以返回* 3、if() 该语句也默认有else ()*/
object Demo03_CodeBlock {def main(args: Array[String]): Unit = {//代码块val a1 = {val a = 10val b = 20a+b}println(a1)val a2 = {val a = 10val b = 20var c = 300c = a + b}println(a2)
//if() elseval age = 17val ag1 = if(age>=18) "成年"println(ag1)val ag2 = if(age>=18) "成年" else 0println(ag2)val ag3 = if(age>=18) "成年" else {"0"println("aaa")}println(ag3)
}
}
小结:
# 1.每个表达式都有一个类型 # 2.条件表达式有值 # 3.混合型表达式,结果是Any或者AnyVal # 4.Scala没有switch语句,但是有更强大的模式匹配
1.8.2 循环表达式
在Scala中有for循环和while循环,用for循环比较多。
1.for循环
for循环语法结构:
for(i <- 表达式)
i <- 表达式 称为生成器,可从集合中取出每个元素。与Java类似,表达式的值必须为可遍历的迭代器Iterator[Any],包括数组、集合(Range、List、Seq……)等。以Range为例,Range表示一种区间类型,常用的两种创建方式为:to和until
val (i,j)=(1,10)
i to j //(包含i和j)
i.to(j)
i until j // (包含i,但不包含j)
i.until(j)
for(n <- i to j) println(n)
for循环嵌套:for语句中可以有多个生成器
for (i <- 1 to 3; j <- 1 to 3) print ((10 * i +j) + " ")
for循环过滤器:也称循环守卫
for (i <- 1 to 3; j <- 1 to 3; if (i != j)) print ((10 * i + j) + " ") for (i <- 1 to 3; j <- 1 to 3; if(i != j);if(j<3)) print ((10 * i + j) + " ") for (i <- 1 to 3; j <- 1 to 3 if i != j if j<3) print ((10 * i + j) + " ")
yield循环体:也称for推导式。Scala中的yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个数组中。 用法如下:
for {子句} yield {变量或表达式}
lazy val retVal=for ( i <- 1 to 10; if i%2==0;if i>5 ) yield i
for(a<-retVal){println(a);
}
示例:
object ForDemo def main(args: Array[String]){//每次循环将区间的一个值赋给ifor( i <- 1 to 10)println(i)for( i <- 1 until 10)println(i)
//for i <-数组val arr = Array("a", "b", "c")for( i <- arr)println(i)
val s = "hello"for(i <- 0 until s.length){println(s(i))}// 或者// for(c <- s)println(c) // 或者// for(i <- 0 until s.length){// println(s.charAt(i))// }//高级for循环(嵌套循环加过滤功能)for(i <- 1 to 3 ; j<- 1 to 3 if i != j){print((10*i + j) + "")println()}//for推导式,如果for循环的循环体以yeild开始,则该循环会构建出一个集合或者数组,每次迭代生成其中一个值。val v= for ( i <- 1 to 10 )yield i*10println (v)}
}
2.while循环和do...while循环
while循环语法:
while (条件语句){表达式}
do...while循环语法
do{表达式}while(条件语句)
//求和
//while实现
val i=1
var sum = 0
while(i<=10){sum += ii += 1
}
println(sum)
//do ... while实现
do {sum += ii += 1
}while (i>=10)
完整代码
package com.qianfeng.scala
/*** 循环*/
object Demo04_ForAndWhile {def main(args: Array[String]): Unit = {//单层循环for (i <- 1 to 10)print(i+"\t")
println()for (i <- 1.until(10))print(i+"\t")println()
//双重循环for (i <- 1 to 3;j <- 1 to(3))print(i*100+j+"\t")
//双重循环,并加过滤条件;多层循环之间需要使用;分割,而条件判断部分不需要也可以println()for (i <- 1 to 3; j<-1 to 3;if(i !=j))print(i*100+j+"\t")println()
//推倒式val res = for (i <- 1 to 10;if (i%2==0)) yield i*10for (i<-res)print(i+"\t")println()
//集合循环for (i <- Array(1,2,5,6,3))print(i+"\t")println()
//while循环var sum = 0while (sum < 10){sum += 1print(sum +"\t")}println()
//do whilevar i = 0do {i += 1print(i+"|")} while (i >= 10)println()}
}
3.循环停止的三种方式
# 1.使用return # 2.使用Boolean变量 # 3.使用breakable块
示例:
object BreakLoopDemo {def main(args: Array[String]): Unit = {//方式2 使用Boolean变量 这个方式只能使用在while或do-while中,for也行但是需要加守卫ifvar flag = truevar n = 0 //计数while(flag){ //死循环//让n自增n += 1println(n)if(n == 10){flag = false} } //for循环版var flag1 = truefor(i <- 0 to 10 if flag){println(i)if (i == 7){flag1 = false}}//方式3 使用breakable块//Scala中是没有break和continue关键字//想使用break,必须导入一个包//正在Scala认为位置都可以导入包 _ 相当于Java导入包是的*import scala.util.control.Breaks._breakable{ //使用break块for(i <- 1 to 10){if( i == 7){break}}} }
}
Guff_hys_python数据结构,大数据开发学习,python实训项目-CSDN博客
相关文章:
scala表达式
1.8 表达式(重点) # 语句(statement):一段可执行的代码# 表达式(expression):一段可以被求值的代码,在Scala中一切都是表达式 - 表达式一般是一个语句块,可包含一条或者多条语句,多条语句使用“…...
uniapp,点击选中并改变颜色,第二次点击取消选中状态
一、效果图 二、代码实现 字符串的indexOf和数组的indexOf用法一致! arr.indexOf(item) 该方法返回某个元素在数组中的位置。若没检索到,则返回 -1。 关键代码:(通过:class绑定) :class"selectList.indexOf(sub.type) ! -1 ? right_ite…...
mmyolo的bbox_loss和检测bbox都是空
最近用mmyolo训练自己的数据集的时候发现训练的时候loss_bbox0,测试和eval的时候结果也全是空的,排除了数据集读取的问题,最后发现是config中自定义了自己的类别但是没有传给dataset。。。 简而言之,在自定义了数据集里的metainf…...
Linux——基本指令(二)
个人主页:日刷百题 系列专栏:〖C语言小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 🌎欢迎各位→点赞👍收藏⭐️留言📝 写在前面: 紧接上一章,我们在理解接下来的命令之前,…...
渲染农场对工业产品渲染带来的意义与优势?
随着科技的进步,利用精细渲染图来呈现和推广工业设计的创新已成为行业标准。这些图像在产品研发、设计评审和营销阶段起着关键作用,同时对产品最终的成功也产生深远影响。然而,由于产品设计日渐复杂,制作渲染图的任务变得极具挑战…...
产品入门第二讲:Axure产品元件库的使用
📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Axure》。🎯🎯 🚀无论你是编程小白,还是…...
(第7天)Linux 静默安装单机 Oracle 19C 数据库
Linux 静默安装安装单机 Oracle 19C 数据库(第7天) 很多朋友经常会问,如果生产环境不允许安装 Linux 图形化界面怎么办?是不是有其他的方式来安装部署 Oracle 数据库呢?答案是肯定的! 我们可以通过命令行的方式来静默安装,不调用图形化界面,当然也就没有那么简单了!…...
智能优化算法应用:基于入侵杂草算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于入侵杂草算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于入侵杂草算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.入侵杂草算法4.实验参数设定5.算法结果6.…...
数据挖掘目标(Kaggle Titanic 生存测试)
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns1.数据导入 In [2]: train_data pd.read_csv(r../老师文件/train.csv) test_data pd.read_csv(r../老师文件/test.csv) labels pd.read_csv(r../老师文件/label.csv)[Su…...
【Vue】router.push用法实现路由跳转
目录 router.push用法 在Login.vue中 在Register.vue中 上一篇:登录与注册界面的制作 https://blog.csdn.net/m0_67930426/article/details/134895214?spm1001.2014.3001.5502 制作了登录与注册界面,并介绍了相关表单元素即属性的用法 在登录页面…...
设计原则 | 接口隔离原则
一、接口隔离原则 1、原理 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。如果强迫客户端依赖于那些它们不使用的接口,那么客户端就面临着这个未使用的接口的改变所带来的变更,这无意间导致了客户程序之…...
maui 调用文心一言开发的聊天APP 3
主要是对代码进行了优化 上一个版本写死了帐号跟密码 ,这一个帐本有户可以直接设置对相关的key以及secret如果设置错时,在聊天中也会返回提示。注册帐号时同时也设置了key及secrete升级到了net.8.0导出APK,上一个版本是导出abb.解决了变型问…...
鸿蒙开发 - ohpm安装第三方库
前端开发难免使用第三方库,鸿蒙亦是如此,在使用 DevEco Studio 开发工具时,如何引入第三方库呢?操作步骤如下,假设你使用的是MacOS,假设你已经创建了了一个项目: 一、配置 HTTP Proxy 在打开了…...
[C++] new和delete
使用new时调用构造函数使用delete时调用析构函数 构造函数 使用new动态分配内存时,如果分配的是基本类型的内存,则不会调用构造函数。如果分配的是自定义类型的内存,则会调用构造函数进行对象的初始化。 例如: int* pInt new…...
OpenVINS学习2——VIRAL数据集eee01.bag运行
前言 周末休息了两天,接着做上周五那个VIRAL数据集没有运行成功的工作。现在的最新OpenVINS需要重新写配置文件,不像之前那样都写在launch里,因此需要根据数据集情况配置好estimator_config.yaml还有两个标定参数文件。 VIRAL数据集 VIRAL…...
jemeter,断言:响应断言、Json断言
一、响应断言 接口A请求正常返回值如下: {"status": 10013, "message": "user sign timeout"} 在该接口下创建【响应断言】元件,配置如下: 若断言成功,则查看结果树的接口显示绿色,若…...
【vue实战项目】通用管理系统:信息列表,信息的编辑和删除
本文为博主的vue实战小项目系列中的第七篇,很适合后端或者才入门的小伙伴看,一个前端项目从0到1的保姆级教学。前面的内容: 【vue实战项目】通用管理系统:登录页-CSDN博客 【vue实战项目】通用管理系统:封装token操作…...
基于FPGA的视频接口之高速IO(光纤)
简介 对于高速IO口配置光纤,现在目前大部分开发板都有配置,且也有说明,在此根据自己的工作经验以及对于各开发板的说明归纳 通过高速IO接口,以及硬件配置,可以实现对于光纤的收发功能,由于GTX的速率在500Mbs到10Gbps之间,但通道高速io可配置光纤10G硬件,物理通完成,则…...
HTML实现页面
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>工商银行电子汇款单</title> </head> &…...
回归预测 | MATLAB实现IWOA-LSTM改进鲸鱼算法算法优化长短期记忆神经网络的数据回归预测(多指标,多图)
回归预测 | MATLAB实现IWOA-LSTM改进鲸鱼算法算法优化长短期记忆神经网络的数据回归预测(多指标,多图) 目录 回归预测 | MATLAB实现IWOA-LSTM改进鲸鱼算法算法优化长短期记忆神经网络的数据回归预测(多指标,多图&#…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
