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.hqwc.cn/news/175965.html

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

相关文章

西门子精彩触摸屏SMART LINE V4 面板使用U盘下载项目程序的具体方法示例

西门子精彩触摸屏SMART LINE V4 面板使用U盘下载项目程序的具体方法示例 WinCC flexible SMART V4 SP1 软件针对SMART LINE V4 面板新增了使用U盘下载项目功能。 注意:“使用U盘下载项目”功能仅支持触摸屏OS版本为V4.0.1.0 及以上的设备。 使用U盘下载项目的步骤可参考以下内…

Skybox天空盒子的更换教程_unity基础开发教程

Skybox天空盒子的更换 Skybox的下载与导入更换SkyboxSkybox属性自定义 Skybox的下载与导入 打开资源商店 搜索FREE Skybox 这里是我使用的是这一款资源&#xff0c;点击添加至我的资源 打开包管理器Package Manager Packages选择My Assets 搜索Sky 选择刚刚添加的天空盒子 点…

高质量实时渲染笔记

文章目录 Real-time shadows1 自遮挡问题2 解决阴影detach问题&#xff1f;3 Aliasing4 近似积分5 percentage closer soft shadows(PCSS)percenta closer filtering(PCF)PCSS的思想 6 Variance Soft Shadow Mapping (VSSM)步骤Moment Shadow Mapping 7 Distance field shadow …

Leetcode刷题详解—— 图像渲染

1. 题目链接&#xff1a;733. 图像渲染 2. 题目描述&#xff1a; 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。…

PHP使用文件缓存实现html静态化

<?php // 动态生成的内容 $content "<html><body><h1>time:".date("Y-m-d H:i:s")."</h1></body></html>"; // 静态文件保存路径和文件名 $staticFilePath "file.html"; if(file_exists($s…

3D Gaussian Splatting文件的压缩【3D高斯泼溅】

在上一篇文章中&#xff0c;我开始研究高斯泼溅&#xff08;3DGS&#xff1a;3D Gaussian Splatting&#xff09;。 它的问题之一是数据集并不小。 渲染图看起来不错。 但“自行车”、“卡车”、“花园”数据集分别是一个 1.42GB、0.59GB、1.35GB 的 PLY 文件。 它们几乎按原样…

【算法】算法题-20231110

一、力口&#xff1a;506. 相对名次 简单 给你一个长度为 n 的整数数组 score &#xff0c;其中 score[i] 是第 i 位运动员在比赛中的得分。所有得分都 互不相同 。 运动员将根据得分 决定名次 &#xff0c;其中名次第 1 的运动员得分最高&#xff0c;名次第 2 的运动员得分第…

图论16-拓扑排序

文章目录 1 拓扑排序2 拓扑排序的普通实现2.1 算法实现 - 度数为0入队列2.2 拓扑排序中的环检测 3 深度优先遍历的后续遍历3.1 使用环检测类先判断是否有环3.2 调用无向图的深度优先后续遍历方法&#xff0c;进行DFS 1 拓扑排序 对一个有向无环图G进行拓扑排序&#xff0c;是将…

部署百川大语言模型Baichuan2

Baichuan2是百川智能推出的新一代开源大语言模型&#xff0c;采用 2.6 万亿 Tokens 的高质量语料训练。在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。包含有 7B、13B 的 Base 和 Chat 版本&#xff0c;并提供了 Chat 版本的 4bits 量化。 模…

搬砖日记:post传数组(三种格式)

1. json型 request({url: /msg/message/batch/read,data,method: post,content-Type: application/json })2. formData数组型 Content-Type: application/x-www-form-urlencoded request({url: /msg/message/batch/read,data,method: post,})3.formData字段重复传型 把data换成…

AMEYA360分析:炬玄智能高精准度、低相噪TCXO时钟补偿芯片

炬玄智能一款TCXO芯片JXT171和生产补偿系统成功通过应用测试&#xff0c;指标达到国际先进水平&#xff0c;实现该产品品类国内首家全国产化突破&#xff0c;为重点行业终端客户供应链保障续上关键一环。 1、典型应用 随着移动通信技术在我国得到广泛应用&#xff0c;蓬勃发展的…

java入门, 记录检测网络

一、需求 在开发中&#xff0c;我们经常需要本地连接服务器&#xff0c;或者数据库这些机器或者组件&#xff0c;但是有时候网络不通&#xff0c;我们怎样检测&#xff0c;除了ping 和 telnet 还需要那些常用的技能。 二、检测网络 1、一般我们先ping一些需要连接的网络ip 或…