Scala---方法与函数
一、Scala方法的定义

- 有参方法&无参方法
def fun (a: Int , b: Int) : Unit = {println(a+b)
}
fun(1,1)def fun1 (a: Int , b: Int) = a+b
println(fun1(1,2))
注意点:
- 方法定义语法 用def来定义
- 可以定义传入的参数,要指定传入参数的类型
- 方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归方法中或者方法的返回值是函数类型的时候。
- scala中方法有返回值时,可以写return,也可以不写return,会把方法中最后一行当做结果返回。当写return时,必须要写方法的返回值。
- 如果返回值可以一行搞定,可以将{}省略不写
- 传递给方法的参数可以在方法中使用,并且scala规定方法的传过来的参数为val的,不是var的。
- 如果去掉方法体前面的等号,那么这个方法返回类型必定是Unit的。这种说法无论方法体里面什么逻辑都成立,scala可以把任意类型转换为Unit.假设,里面的逻辑最后返回了一个string,那么这个返回值会被转换成Unit,并且值会被丢弃。
二、递归方法
1./**
2.* 递归方法
3.* 5的阶乘
4.*/
def fun2(num : Int) : Int = {if(num == 1)numelsenum * fun2(num-1)
}
print(fun2(5))
三、参数有默认值的方法
- 默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值。
- 如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称。
1./**
2.* 包含默认参数值的函数
3.* 注意:
4.* 1.默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值
5.* 2.如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称
6.*/
7.def fun3(a :Int = 10,b:Int) = {
8. println(a+b)
9.}
10.fun3(b=2)
四、可变参数的方法
- 多个参数用逗号分开
1./**
2.* 可变参数个数的函数
3.* 注意:多个参数逗号分开
4.*/
5.def fun4(elements :Int*)={
6. var sum = 0;
7. for(elem <- elements){
8. sum += elem
9. }
10. sum
11.}
12.println(fun4(1,2,3,4))
五、匿名函数
- 有参匿名函数
- 无参匿名函数
- 有返回值的匿名函数
- 可以将匿名函数返回给val定义的值
1./**
2.* 匿名函数
3.* 1.有参数匿名函数
4.* 2.无参数匿名函数
5.* 3.有返回值的匿名函数
6.* 注意:
7.* 可以将匿名函数返回给定义的一个变量
8.*/
9.//有参数匿名函数
10.val value1 = (a : Int) => {
11. println(a)
12.}
13.value1(1)
14.//无参数匿名函数
15.val value2 = ()=>{
16. println("我爱尚学堂")
17.}
18.value2()
19.//有返回值的匿名函数
20.val value3 = (a:Int,b:Int) =>{
21. a+b
22.}
23.println(value3(4,4))
六、嵌套方法
1./**
2.* 嵌套方法
3.* 例如:嵌套方法求5的阶乘
4.*/
5.def fun5(num:Int)={
6. def fun6(a:Int,b:Int):Int={
7. if(a == 1){
8. b
9. }else{
10. fun6(a-1,a*b)
11. }
12. }
13. fun6(num,1)
14.}
15.println(fun5(5))
七、偏应用函数
偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。
1./**
2.* 偏应用函数
3.*/
4.def log(date :Date, s :String)= {
5. println("date is "+ date +",log is "+ s)
6.}
7.
8.val date = new Date()
9.log(date ,"log1")
10.log(date ,"log2")
11.log(date ,"log3")
12.
13.//想要调用log,以上变化的是第二个参数,可以用偏应用函数处理
14.val logWithDate = log(date,_:String)
15.logWithDate("log11")
16.logWithDate("log22")
17.logWithDate("log33")
八、高阶函数
函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。
- 函数的参数是函数
- 函数的返回是函数
- 函数的参数和函数的返回是函数
1./**
2.* 高阶函数
3.* 函数的参数是函数 或者函数的返回是函数 或者函数的参数和返回都是函数
4.*/
5.
6.//函数的参数是函数
7.def hightFun(f : (Int,Int) =>Int, a:Int ) : Int = {
8. f(a,100)
9.}
10.def f(v1 :Int,v2: Int):Int = {
11. v1+v2
12.}
13.
14.println(hightFun(f, 1))
15.
16.//函数的返回是函数
17.//1,2,3,4相加
18.def hightFun2(a : Int,b:Int) : (Int,Int)=>Int = {
19. def f2 (v1: Int,v2:Int) :Int = {
20. v1+v2+a+b
21. }
22. f2
23.}
24.println(hightFun2(1,2)(3,4))
25.
26.//函数的参数是函数,函数的返回是函数
27.def hightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {
28. f
29.}
30.println(hightFun3(f)(100,200))
31.println(hightFun3((a,b) =>{a+b})(200,200))
32.//以上这句话还可以写成这样
33.//如果函数的参数在方法体中只使用了一次 那么可以写成_表示
34.println(hightFun3(_+_)(200,200))
九、柯里化函数
1./**
2.* 柯里化函数
3.*/
4.def fun7(a :Int,b:Int)(c:Int,d:Int) = {
5. a+b+c+d
6.}
7.println(fun7(1,2)(3,4))
相关文章:
Scala---方法与函数
一、Scala方法的定义 有参方法&无参方法 def fun (a: Int , b: Int) : Unit {println(ab) } fun(1,1)def fun1 (a: Int , b: Int) ab println(fun1(1,2)) 注意点: 方法定义语法 用def来定义可以定义传入的参数,要指定传入参数的类型方法可以写返…...
【C++】泛型编程 ④ ( 函数模板 与 普通函数 调用规则 | 类型自动转换 | 类型自动转换 + 显式指定泛型类型 )
文章目录 一、普通函数 与 函数模板 的调用规则 - 类型自动转换1、函数模板和重载函数2、类型自动转换3、代码示例 - 类型自动转换 二、普通函数 与 函数模板 的调用规则 - 类型自动转换 显式指定泛型类型1、类型自动转换 显式指定泛型类型2、代码示例 - 类型自动转换 显式指…...
基于ChatGPT的文本生成艺术框架—WordArt Designer
WordArt Designer是一个基于gpt-3.5 turbo的艺术字生成框架,包含四个关键模块:LLM引擎、SemTypo、Styltypo和TextTypo模块。由gpt-3.5 turbo驱动的LLM引擎可以解释用户输入,从而将抽象概念转化为具体的设计。 SemTypo模块使用语义概念优化字体设计&…...
服务名无效。 请键入 NET HELPMSG 2185以获得更多的帮助
遇到的问题是MySQL服务没有。 因为net start 服务名,启动的是win下注册的服务。此时,我系统中并没有注册mysql到服务中。即下面没有mysql服务。 mysqld --install net start mysql...
UE5——C++编译MSB3073报错
报错: C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VC\v170\Microsoft.MakeFile.Targets(50,5): error MSB3073: 命令“D:\0_Game\EpicGame\UE_5.1\Engine\Build\BatchFiles\Rebuild.bat DigitalVisualizationEditor Win64 Deve…...
自己动手实现一个深度学习算法——六、与学习相关的技巧
文章目录 1.参数的更新1)SGD2)Momentum3)AdaGrad4)Adam5)最优化方法的比较6)基于MNIST数据集的更新方法的比较 2.权重的初始值1)权重初始值不能为02)隐藏层的激活值的分布3ÿ…...
Maven间接依赖
目录 背景 依赖标签 依赖的作用域 Maven仲裁机制 场景示例 多个pom树合并打包...
Java架构师分布式搜索数据准确性解决方案
目录 1 Elasticsearch内置分词器1.1 Standard(标准分词器)1.2 Simple(简单分词器)1.3 Whitespace(空格分词器)1.4 Stop(停止分词器)1.5 Keyword(关键字分词器)1.6 Pattern(模板分词器)1.7 Language(语言分词器)1.8 Fingerprint(指纹分词器)2 Es 模糊查询 match…...
Clickhouse学习笔记
学习内容参考:一套上手ClickHouse-OLAP分析引擎,囊括Prometheus与Grafana_哔哩哔哩_bilibili 下为笔记链接,以及全套笔记pdf版本 Clickhouse学习笔记(1)—— ClickHouse的安装启动_clickhouse后台启动_THE WHY的博客-C…...
vim——“Linux”
各位CSDN的uu们好呀,今天,小雅兰的内容是Linux的开发工具——vim。下面,我们一起进入Linux的世界吧!!! Linux编辑器-vim使用 vim的基本概念 vim的基本操作 vim正常模式命令集 vim末行模式命令集 vim操…...
【QT深入理解】QT中的几种常用的排序函数
第一章:排序函数的概述 排序函数是一种在编程中常用的函数,它可以对一个序列(如数组,列表,向量等)中的元素进行排序,使其按照一定的顺序排列。排序函数可以根据不同的排序算法,如冒…...
自压缩llm 为 超长记忆
自压缩llm 为 超长记忆 解释数据处理实际例子解释 # 自压缩llm 为 超长记忆 # prompt 格式 # <|细颗粒词表|><|粗颗粒词表|><|细颗粒词表|> # 细颗粒词表 = 词1,词2,词3,词4,词5,词6,词7,词8,词9,词10, # 组颗粒词表id1, 组颗粒词表id2, 组颗粒…...
Perl的LWP::UserAgent库爬虫程序怎么写
Perl的LWP::UserAgent库是一个用于发送HTTP请求的Perl模块。它可以用于编写Web爬虫、测试Web应用程序、自动化Web操作等。以下是一个简单的使用LWP::UserAgent库发送HTTP GET请求的Perl脚本的例子: #!/usr/bin/perluse strict; use warnings; use LWP::UserAgent;# …...
【算法】算法题-20231116
这里写目录标题 一、合并两个有序数组(力扣88 )二、剑指 Offer 39. 数组中出现次数超过一半的数字三、移除元素(力扣27)四、找出字符串中第一个匹配项的下标(28) 一、合并两个有序数组(力扣88 &…...
微软允许OEM对Win10不提供关闭Secure Boot
用户可能将无法在Windows 10电脑上安装其它操作系统了,微软不再要求OEM在UEFI 中提供的“关闭 Secure Boot”的选项。 微软最早是在Designed for Windows 8认证时要求OEM的产品必须支持UEFI Secure Boot。Secure Boot 被设计用来防止恶意程序悄悄潜入到引导进程。问…...
海康G5系列(armv7l) heop模式下交叉编译Qt qmqtt demo,出现moc缺少高版本GLibc问题之解决
1.编辑源 sudo vi /etc/apt/sources.list 2.添加高版本的源 deb http://th.archive.ubuntu.com/ubuntu jammy main #添加该行到文件 3.运行升级 sudo apt update sudo apt install libc6 4.strings /**/libc.so.6 |grep GLIBC_ 参考链接:version GLIBC_2.3…...
gRPC协议详解
gRPC介绍 gRPC是一个高性能、开源和通用的RPC(远程过程调用)框架,由Google发起并开发,于2015年对外发布。它基于HTTP/2协议和Protocol Buffers设计,支持多种编程语言(如C、Java、Python、Go、Ruby、C#、No…...
虹科方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案
来源:雅名特自动驾驶 虹科方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案 自动驾驶软件在环(SiL)测试解决方案 自动驾驶软件在环(SiL)测试解决方案能够研究和验证高历程实验和恶劣驾…...
demo(二)eurekaribbon----服务注册、提供与消费
前一篇实现了服务注册中心的搭建,并提供服务注册到注册中心上。在之前的基础上,实现服务消费。 一、相关介绍 1、RestTemplate工具 2、LoadBalanced注解 二、ribbon示例: 先启动eureka-service注册中心,再将eureka-client修改…...
2023年09月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 阅读以下代码,程序输出结果正确的选项是?( ) def process_keywords(keywords_list):unique_keywords = list(set(keywords_list))...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
