Scala的高级特性

Scala的高级特性

 

☀小白的Scala学习笔记 

 

目录

Scala的高级特性

1.匿名函数

2.如何把方法转化为函数

3.柯里化

1)柯里化

2)实例

3)柯里化应用:排序

4)练习 Tea


 

 

1.匿名函数

 

Scala 中的匿名函数是一种没有命名的函数,通常用于在代码中定义和传递简单的功能逻辑。匿名函数在 Scala 中被称为函数字面量(function literals),它的语法非常简洁和灵活。

下面是一个简单的 Scala 匿名函数的例子:

 

// 定义一个接受两个整数参数并返回它们之和的普通函数
def add(x: Int, y: Int): Int = x + y// 使用匿名函数实现相同的功能
val addFunction = (x: Int, y: Int) => x + y// 在调用时,可以直接传递参数并调用匿名函数
val result = addFunction(3, 5)
println(result) // 输出: 8

099a52847da54630a1f2e81b8f91729f.png

 

在这个例子中,我们通过 val addFunction = (x: Int, y: Int) => x + y 的方式定义了一个匿名函数,它接受两个整数参数 x 和 y,并返回它们的和。在调用时,我们直接使用 addFunction(3, 5) 进行调用,并将结果打印出来。

匿名函数在 Scala 中非常常见,特别是在函数式编程中经常用于传递逻辑给高阶函数(higher-order functions)或者在需要临时定义函数的场景下使用。它的灵活性和简洁性使得代码更加清晰和易于理解。

 

 

2.如何把方法转化为函数

 

在 Scala 中,可以使用 _操作符来将方法转换为函数。

注:下划线前有空格

 

package com.oracle.jtxyobject Test2 {// 定义一个普通的方法def greet(name: String): String = {s"Hello, $name!"}def main(args: Array[String]): Unit = {// 使用下划线将方法转化为函数val greetFunction = greet _// 调用函数val result = greetFunction("Alice")println(result) // 输出: Hello, Alice!}
}

4a04b17e64da4b27a04d36c48724ff1f.png

 

package com.oracle.jtxyobject Test3 {// 定义一个普通的方法def double(x: Int): Int = x * 2def main(args: Array[String]): Unit = {// 使用`_`操作符将方法转化为函数val doubleFunction = double _// 调用函数val result = doubleFunction(5)println(result) // 输出: 10}
}

19e6b79c7ed04249868e439db91538d8.png

 

3.柯里化

1)柯里化

 

柯里化:在传递参数时可以分为多个括号来传递

 

package com.oracle.jtxyobject Test1 {def add(a:Int)(b:Int)=a+bdef main(args: Array[String]): Unit = {//柯里化:在传递参数时可以分为多个括号来传递val i = add(12)(24)println(i)}}

 

29bb0f622613436fa5fe2914cc2be362.png

 

那么 我们可能会说它有些多余 不过后面我们很快就能见到它的效果啦

 

2)实例

 

假设现在我们有一个方法 求 a+b 但是我现在想要在调用时 只传入一个参数 a 

 

b 给一个默认值 变成隐式参数

 

package com.oracle.jtxyobject Test1 {implicit val c:Int=3def add(a:Int)(implicit b:Int)={a+b}//b给一个默认值 调用的时候不需要传递 把参数变成隐式参数//当我们使用柯里化后 如果有参数是隐式的话 Scala会自动在上下文中搜索对应类型的变量def main(args: Array[String]): Unit = {//柯里化:在传递参数时可以分为多个括号来传递val i = add(12)println(i)}}

dd11583160884e64b67ae1d255926358.png

3)柯里化应用:排序

 

1.通过隐式变量实现(Ordering)

 

package com.oracle.jtxyobject Test4 {//ord 对象 能指导两个变量的大小//通过隐式变量实现implicit val ord=new Ordering[Stu](){override def compare(x: Stu, y: Stu): Int = x.sage - y.sage}case class Stu(sname:String,ssex:String,sage:Int)def main(args: Array[String]): Unit = {val list=List(Stu("zhangsan1","nan",21),Stu("zhangsan2","nan",11),Stu("zhangsan3","nan",16),Stu("zhangsan4","nan",33))val res=list.sortBy(x=>x)println(res)}}

0fb0717dd9e642bcb4a16325b6f403b6.png

 

2.通过隐式转换实现(Ordered)

 

package com.oracle.jtxyobject Test4 {//隐式转换 定义的是隐式的方法implicit def toStu(s:Stu)=new Ordered[Stu]{override def compare(that: Stu): Int = s.sage - that.sage}case class Stu(sname:String,ssex:String,sage:Int)def main(args: Array[String]): Unit = {val list=List(Stu("zhangsan1","nan",21),Stu("zhangsan2","nan",11),Stu("zhangsan3","nan",16),Stu("zhangsan4","nan",33))val res=list.sortBy(x=>x)println(res)}}

a531b51391dd427db39592264834211c.png

 

4)练习 Tea

 

1.通过隐式变量实现

 

package com.oracle.jtxyimport scala.collection.mutable.ArrayBufferobject Test5 {//通过隐式变量实现implicit val ord=new Ordering[Tea](){override def compare(x: Tea, y: Tea): Int = x.tage - y.tage}case class Tea(tname:String,tsex:String,tage:Int)//样例类def main(args: Array[String]): Unit = {val array=new ArrayBuffer[Tea]()array.append(Tea("wangwu","nan",23),Tea("lisi","nv",45),Tea("maliu","nan",65),Tea("mazi","nan",28))val teas = array.sortBy(x => x)println(teas)}}

4c0dfe9b2e1c4a1388448a40d5df8316.png

 

2.通过隐式转换实现

 

package com.oracle.jtxyimport scala.collection.mutable.ArrayBufferobject Test5 {//通过隐式变量实现implicit def toTea(t:Tea)=new Ordered[Tea]{override def compare(that: Tea): Int = t.tage - that.tage}case class Tea(tname:String,tsex:String,tage:Int)//样例类def main(args: Array[String]): Unit = {val array=new ArrayBuffer[Tea]()array.append(Tea("wangwu","nan",23),Tea("lisi","nv",45),Tea("maliu","nan",65),Tea("mazi","nan",28))val teas = array.sortBy(x => x)println(teas)}}

d91b27fa8ce2460baa6d829b582d3dd8.png

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化剪辑,账号矩阵管理,视频分发,聚合私信多功能一体化营销工具 源代码开发部署方案

可视化剪辑,账号矩阵管理,视频分发,聚合私信多功能一体化营销工具 源代码开发部署方案 可视化剪辑: 可视化剪辑开发是一种通过图形化界面和拖放操作,以可视化的方式进行影片剪辑和编辑的开发方法。它可以让非专业用户…

小知识点快速总结:Batch Normalization Layer(BN层)的作用

本系列文章只做简要总结,不详细说明原理和公式。 目录 1. 参考文章2. 主要作用3. 具体分析3.1 正则化,降低过拟合3.2 提高模型收敛速度,加速训练3.3 减少梯度爆炸或者梯度消失的情况 4. 补充4.1 BN层做的是标准化不是归一化4.2 BN层的公式4.…

Golang 依赖注入库Wire应用案例

文章目录 简介Github指南安装案例wire.NewSetwire.Buildwire.Bindwire.Structwire.Valuewire.InterfaceValue 简介 Go语言的依赖注入库Wire是由Google提供的一个代码生成工具,用于简化和自动化依赖注入过程。Wire主要通过生成代码来处理依赖关系,而不是…

上网行为管理产品有哪些?好用的四款上网行为管理产品

上网行为管理产品是现代企业网络安全架构中的重要组成部分,它们旨在帮助企业有效监控、管理和控制员工的网络使用行为,确保网络资源的合理利用,保障信息安全,提升工作效率。 以安企神为例,我们将详细介绍它的主要功能…

【内存管理之C语言数组】

1.栈空间上的C数组 糟糕的可用性,但是你将在遗留代码中见到它们 相同类型的对象的内存块 大小必须是常量表达式 第一个元素索引为0 2.指针和C数组 更奇怪的是:数组标识符退化为指向第一个元素的指针 3.访问数组 4.堆空间上的C数组 相同类型的对象的内…

SSM情侣购物系统-计算机毕业设计源码02387

目 录 摘要 1 绪论 1.1 开发背景与意义 1.2开发意义 1.3Vue.js 主要功能 1.3论文结构与章节安排 2 情侣购物系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分…

Qwen2的各模型性能、占用显存和推理速度比较(摘自官方文档)

Qwen2的各模型性能、占用显存和推理速度比较(摘自官方文档) 性能 推理速度(从大到小) 72B 57B-A14B 7B 1.5B 0.5B

59.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(7)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:58.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(6) 关于御剑…

【TB作品】STM32F102C8T6单片机,PWM发生器

硬件: STM32F102C8T6核心板,按键,0.96 OLED显示屏。 软件: 1、硬件启动触发单片机输出PWM,未触发之前PWM输出为低电平。 2、按键修改PWM的变化模式、变化时间长度、占空比上下限。 3、输出的PWM是固定的10kHZ的。 4、变…

【万方数据库爬虫简单开发(自用)】

万方数据库爬虫简单开发(自用)(一) 使用Python爬虫实现万方数据库论文的搜索并获取信息1.获取url2.输入关键词3.使用BeautifulSoup解析4.获取文章标题信息 使用Python爬虫实现万方数据库论文的搜索并获取信息 后续会逐步探索更新…

洗地机哪款好?洗地机十大名牌排行榜

随着科技的发展,各种家居清洁工具层出不穷,为我们的生活带来了诸多便利。在众多清洁工具中,洗地机的清洁效果更受大家喜爱,它能够完美解决了扫地机无法做到的干湿垃圾“一遍清洁”效果,而且几乎能解决日常生活中所有的…

笔记 | 软件工程06-1:软件设计-软件设计基础

1 软件设计概述 1.1 为什么要软件设计 1.2 何为软件设计 何为软件系统的解决方案? 软件设计关注与软件需求的实现问题软件设计是需求分析和软件实现间的桥梁 1.3 软件设计的质量要求 1.4 软件设计的过程 1.4.1 软件体系结构设计 1.4.2 用户界面设计 1.4.3 软件详细…

如何轻松利用人工智能深度学习,提升半导体制造过程中的良率预测?

背景 这个项目涉及半导体制造过程的监测领域。在半导体制造中,不断收集来自传感器或过程测量点的信号是常态。然而,并非所有这些信号在特定的监测系统中都同等重要。这些信号包括了有用的信息、无关的信息以及噪声。通常情况下,工程师获得的…

将Jar用三种方式生成Windows的安装程序

无论是WEB(spring boot)的JAR,还是JavaFX以及swing的Jar,要生成windows方式。 打包成Windows可执行文件(.exe),你可以使用以下三种方法: ### 方法1:使用Inno Setup 1. **构建JavaFX应用程序**: 使用M…

2779. 数组的最大美丽值

简单翻译一下题目意思: 对于每个 nums[i] 都可以被替换成 [nums[i]-k, nums[i]k] 区间中的任何数,区间左右是闭的。在每个数字可以替换的前提下,返回数组中最多的重复数字的数量。 第一想法是用一个哈希表,Key 是可以被替换的数…

Kotlin 语言基础学习

什么是Kotlin ? Kotiln翻译为中文是:靠他灵。它是由JetBrains 这家公司开发的,JetBrains 是一家编译器软件起家的,例如常用的WebStorm、IntelliJ IDEA等软件。 Kotlin官网 JetBrains 官网 Kotlin 语言目前的现状: 目前Android 已将Kotlin 作为官方开发语言。 Spring 框…

硬件SPI读写W25Q64

硬件SPI读写W25Q64 接线图(和软件SPI一样) 使用SPI1,SCK,接PA5;MISO,接PA6;MOSI,接PA7;NSS,可接PA4。 接线图对应:PA5接CLK引脚,PA6…

【数据结构】第十六弹---C语言实现希尔排序

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、希尔排序( 缩小增量排序 ) 1.1、预排序实现 1.2、希尔排序代码实现 1.3、代码测试 1.4、时空复杂度分析 1.5、性能比较 总结 上一弹我们…

【产品应用】一体化步进伺服电机在吊装机器人中的应用

随着工业自动化和智能制造的发展,吊挂式智能巡检机器人逐渐成为许多工业场景中的重要角色。这类机器人不仅能够提升工作效率,减少人工干预,还能在复杂或危险环境中完成巡检任务。在这些机器人的设计与制造中,一体化步进伺服电机扮…

windows环境如何运行python/java后台服务器进程而不显示控制台窗口

1.通常我们在windows环境下使用Java或Python语言编写服务器程序,都希望他在后台运行,不要显示黑乎乎的控制台窗口: 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里,可是开机的…