Scala学习(四)

news/2024/10/31 7:34:06/

文章目录

  • 1.闭包
  • 2.函数式编程递归和尾递归
      • 2.1递归
      • 2.2 尾递归
  • 3.控制抽象
      • 3.1 值调用
      • 3.2 名调用
  • 4.惰性函数

1.闭包

如果一个函数,访问到了它的外部(局部)变量的值,那么这个函数和它所处的环境称之为闭包

    //闭包练习def sumX(x:Int)={def sumY(y:Int):Int={x+y}sumY _}val xResult = sumX(5)val result = xResult(6)println(result)

在这里插入图片描述

2.函数式编程递归和尾递归

2.1递归

嵌套调用自身的函数
必须要有停止的条件
递归调用的参数必须有规律
结果值的类型不能省略

    //使用递归实现阶乘def func_count(n:Int):Long={if(n==1){1L}else{func_count(n-1)*n}}println(func_count(6))

在这里插入图片描述

2.2 尾递归

尾递归,顾名思义,即最后递归调用函数的一行,只有自身的函数没有其他的值。

    //使用尾递归对阶乘进行优化def lastRecursion(n:Int,res:Long=1):Long={if(n==1){res}else{lastRecursion(n-1,res*n)}}val result = lastRecursion(5)println(result)

在这里插入图片描述

3.控制抽象

控制抽象分为值调用和名调用

3.1 值调用

值调用就是将代码块的结果作为参数传入到函数当中

    //控制抽象def sayHi(name:String)={println("函数调用")println(s"hi $name")println(s"hi $name")}sayHi({println("我是代码块")"mao"})

在这里插入图片描述

3.2 名调用

名调用不是将代码块的结果作为参数传入函数中,直接将整个代码块传入到参数中,使用一次代码块就会运行一次。

    def sayHi(name: =>String)={println("函数调用")println(s"hi $name")println(s"hi $name")}sayHi({println("我是代码块")"mao"})

在这里插入图片描述

4.惰性函数

惰性函数,当函数的返回值被声明为lazy的时候,函数的执行将被推迟到我们首次对此取值,该函数才会执行,这种函数我们称为惰性函数
案例实操:

//正常函数执行//实现懒加载def sumXY(x: Int, y: Int): Int = {println("sum函数调用")x + y}val sum: Int = sumXY(5, 6)println("其他代码")println(sum)

运行结果:
在这里插入图片描述
使用惰性函数运行上述代码,不会在调用函数的时候就执行,而是等到调用返回值的时候再进行计算

    lazy val sum: Int = sumXY(5,6)println("其他代码")println(sum)

在这里插入图片描述


http://www.ppmy.cn/news/65783.html

相关文章

CGAL 建筑物轮廓规则化(二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设给定一组由线段连接的有序二维点,这些点构成一个闭合或开放的轮廓,CGAL中提供了三种方式来实现多边形轮廓的规则化: 平行:将检测到的接近平行的轮廓边缘完全平行。正交性:将检测到接近正交的轮廓边缘,使其完…

【力扣】刷题+剑指offer第二版

文章目录 题目收藏不含重复字符的最长子串最长公共子串 剑指 Offer剑指 Offer 05. 替换空格剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 09. 用两个栈实现队列剑指 Offer 07. 重建二叉树剑指 Offer 06. 从尾到头打印链表剑指 Offer 11. 旋转数组…

进程调度/页面置换/磁盘调度算法

进程调度算法 进程调度算法也称 CPU 调度算法,毕竟进程是由 CPU 调度的。 当 CPU 空闲时,操作系统就选择内存中的某个「就绪状态」的进程,并给其分配 CPU。 什么时候会发生 CPU 调度呢?通常有以下情况: 当进程从运…

什么是阿里云服务器?云服务器的优缺点

阿里云服务器是什么?云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,云服务器可以降低IT成本提升运维效率,免去企业或个人前期采购IT硬件的成本,阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

2.3 利用NumPy进行统计分析

2.3 利用NumPy进行统计分析 2.3.1 读/写文件1、二进制的文件读写2、读取文本格式的数据 2.3.2 使用数组进行简单统计分析1、排序2、去重与重复数据3、常用的统计函数 2.3.1 读/写文件 NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式 1、二进制的文件读…

React--》React组件变化每次都会导致重新渲染,如何解决?

目录 React.memo useCallback useMemo React.memo React组件会在两种情况下下发生渲染 第一种:当组件自身的state发生变化时 第二种:当组件的父组件重新渲染时 第一种情况下重新渲染无可厚非,state都变化了组件自然应该重新进行渲染&…

Centos 7 配置和使用 MySql 8.0 以及API

1 检查环境 [rootcentos7 opt]# rpm -qa | grep mariadb 有则卸载 mariadb :(显示什么卸载什么) [rootcentos7 opt]# rpm -e --nodeps mariadb-libs [rootcentos7 opt]# rpm -e --nodeps mariadb-devel-5.5.65-1.el7.x86_642 安装依赖 [ro…

自动修改文章的软件-文章原创软件

免费版自动修改文章的软件 免费版自动修改文章的软件是一种又快速、易用且免费的文章修改软件,可以帮助用户批量修改文章和图文,并为用户提供高质量的修改服务。用户仅需上传待修改的文章文件,软件就能自动检测出文章中的语法、拼写错误和表…