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))

注意点:

  1. 方法定义语法 用def来定义
  2. 可以定义传入的参数,要指定传入参数的类型
  3. 方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归方法中或者方法的返回值是函数类型的时候。
  4. scala中方法有返回值时,可以写return,也可以不写return,会把方法中最后一行当做结果返回。当写return时,必须要写方法的返回值。
  5. 如果返回值可以一行搞定,可以将{}省略不写
  6. 传递给方法的参数可以在方法中使用,并且scala规定方法的传过来的参数为val的,不是var的。
  7. 如果去掉方法体前面的等号,那么这个方法返回类型必定是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. 如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称。
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. 多个参数用逗号分开
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))

五、匿名函数

  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. 函数的参数和函数的返回是函数
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))

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

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

相关文章

Stable Diffusion1.5网络结构-超详细原创

目录 1 Unet 1.1详细整体结构 1.2 缩小版整体结构 1.3 时间步编码 1.4 CrossAttnDownBlock2D 1.4.1 ResnetBlock2D 1.4.2 Transformer2DModel 1.4.2.1 BasicTransformerBlock 1.4.2.1.1 SelfAttention 1.4.2.1.2 CrossAttention 1.4.2.1.3 FeedForward 1.4.3 DownS…

windows虚拟内存自定义分配以及mysql错误:Row size too large (> 8126)

文章目录 虚拟内存概要windows-server配置虚拟内存技术名词解释关于mysql错误Row size too large (> 8126)问题分析解决办法 虚拟内存概要 虚拟内存别称虚拟存储器&#xff08;Virtual Memory&#xff09;。电脑中所运行的程序均需经由内存执行&#xff0c;若执行的程序占用…

pdf文档转word文档

很久以前写的代码了&#xff0c;当时好象是因为朋友临时需要&#xff0c;找了好几个工具都是要付费&#xff0c;单独为了一个文档花钱好象有点划不来&#xff0c;就用python简单做了个&#xff0c;今天不小心划拉了出来&#xff0c;反正收着也没什么用&#xff0c;贴出来开心一…

Angular, React,Vus三大主流前端开发框架Setup

Angular: //文档 https://angular.dev/ //创建项目 1. npm install -g angular/cli2. ng new my-angular-app//启动 npm run start//构建 npm run build//代码检查 ESlint React: //文档 https://create-react-app.dev/docs/getting-started //TypeScript https://www.types…

遥感领域最热门的研究主题介绍

遥感是有效地直接从地球收集数据的最重要技术之一。由于生态信息科学的进步&#xff0c;遥感技术在日常生活的多个研究方面变得非常有价值&#xff0c;其中包括大气物理学、生态学、土壤和水污染、土壤科学、地质学、火山爆发和地球演化。以下是遥感领域的主要趋势研究主题&…

抖音订单列表查询api接口

怎么获取订单列表接口 请求地址&#xff1a;响应示例及参数

.bashrc文件中环境变量配置错误,导致linux命令无法正常使用

问题描述 配置环境变量时出错&#xff0c;导致linux命令无法使用 解决方案&#xff1a; 执行下面命令 export PATH/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin vim就可以使用了&#xff0c;将错误纠正 vim ~/.bashrc 环境生效 source ~/.bashrc…

(论文阅读30/100)Convolutional Pose Machines

30.文献阅读笔记CPMs 简介 题目 Convolutional Pose Machines 作者 Shih-En Wei, Varun Ramakrishna, Takeo Kanade, and Yaser Sheikh, CVPR, 2016. 原文链接 https://arxiv.org/pdf/1602.00134.pdf 关键词 Convolutional Pose Machines&#xff08;CPMs&#xff09;…

IDEA 中设置 File Header 以及自定义类、方法注释模板的方法

目录 1 设置 File Header2 自定义类、方法注释生成类注解模板生成方法注解模板 1 设置 File Header File -> Settings -> File and Code Templates -> Includes -> File Header -> 编辑 2 自定义类、方法注释 File -> Settings -> Live Templates -&g…

ETCD 集群安装、部署、备份和使用

命令的含义是&#xff1a;在 /etcd_backup/ 目录下查找 30 天前创建的文件或目录&#xff0c;并将它们全部删除。 find /bak/backup/ -ctime 30 -exec rm -r {} \;

kafka+ubuntu20.04+docker配置

记录一次配置过程 安装docker 参加下面链接的第一部分 Ubuntu20.04使用docker安装kafka服务-CSDN博客 安装zookeeper docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper安装kafka服务 docker run -d --name kafka …

Jquery 通过class名称属性,匹配元素

UI自动化过程中&#xff0c;常常需要判断某个元素是否满足条件&#xff0c;再走不通的脚本逻辑&#xff1b;、本文介绍如何通过jquery判断菜单是否展开&#xff0c;来决定是否执行菜单展开脚本&#xff1b;Jquery通过class名称属性&#xff0c;匹配元素 我们先分析&#xff0c;…

C++核心编程 day09 类型转换、异常、输入输出流

C核心编程 day09 类型转换、异常、输入输出流 1. 类型转换2. 异常2.1 异常语法2.2 C标准异常库 3. 输入输出流3.1 输入输出流概念以及流类库3.2 标准输入流3.3 标准输出流3.4 文件读写 1. 类型转换 C中的类型转换有四类&#xff0c;分别是静态转换、动态转换、常量转换、重新解…

图像分类系列(二) VGGNet学习详细记录

经典神经网络论文超详细解读&#xff08;二&#xff09;——VGGNet学习笔记&#xff08;翻译&#xff0b;精读&#xff09; 前言 上一篇我们介绍了经典神经网络的开山力作——AlexNet&#xff1a;经典神经网络论文超详细解读&#xff08;一&#xff09;——AlexNet学习笔记&a…

14.dimp导入、dexp导出达梦DM数据库

目录 命令执行位置 1.备份 1.1 导出库 1.2 导出表 2.恢复 2.1 导入数据库 2.1.1 导入 2.1.2 导入到另一数据库 2.2 导入表 3. dexp和dimp常见操作命令 命令执行位置 在opt/dmbms/bin下执行.dexp #进入达梦数据库容器内部 docker exec -it f99 /bin/bash#进入目录 c…

C生万物 | 从浅入深理解指针【最后部分】

C生万物 | 从浅入深理解指针【最后部分】 文章目录 C生万物 | 从浅入深理解指针【最后部分】前言sizeof和strlen的对比sizeofstrlen 数组和指针笔试题解析一维数组字符数组二维数组 前言 我们前面学了四个部分了&#xff0c;如果没有看前面的建议可以看一下前面的~~ C生万物 |…

java架构师禁止在项目中使用继承,合理吗?

java架构师禁止在项目中使用继承&#xff0c;合理吗&#xff1f; 如果建议用组合替代继承&#xff0c;非必要不用继承&#xff0c;这个很合理的建议的。 在非必要的情况下不用继承&#xff0c;用组合替代有几个优势&#xff1a;最近很多小伙伴找我&#xff0c;说想要一些 Jav…

使用Python调用API接口获取京东关键词详情数据

在电商领域&#xff0c;获取关键词的详情数据对于产品分析、市场研究等方面具有重要意义。京东作为中国最大的电商平台之一&#xff0c;提供了丰富的API接口供开发者使用。本文将详细介绍如何使用Python调用京东的API接口获取关键词详情数据&#xff0c;并给出相应的代码实现。…

milvus数据库-查询

与向量相似性搜索不同&#xff0c;向量查询通过基于布尔表达式的标量过滤来检索向量。Milvus支持许多标量字段中的数据类型和各种布尔表达式。布尔表达式过滤标量字段或主键字段&#xff0c;并检索与过滤器匹配的所有结果。 一、单次查询 1.加载集合 2.执行查询 # 使用集合对…

元宇宙3D云展厅应用到汽车销售的方案及特点

为了紧紧抓住年轻消费者的需求&#xff0c;汽车销售行业也正在经历一场深刻的变革。在这个变革的前沿&#xff0c;元宇宙3D汽车展厅作为一项全新技术闪亮登场&#xff0c;打破了传统汽车销售模式的限制&#xff0c;为消费者带来了前所未有的购车体验。 元宇宙3D汽车展厅采用了尖…