Scala学习(四)

news2024/12/26 21:44:28

文章目录

  • 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.coloradmin.cn/o/518138.html

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

相关文章

闲谈【Stable-Diffusion WEBUI】的插件:模型工具箱:省空间利器

文章目录 (零)前言(一)模型工具箱(Model Toolbox)(1.1)基本使用界面(1.2)高阶使用界面(1.3)自动修剪模型 (零)…

MyBatis基础介绍

目录 MyBatis是什么 怎么学MyBatis 第一个MyBatis查询 MyBatis的定位 创建数据库和表 搭建MyBatis环境 添加MyBatis框架支持 设置MyBatis的配置信息 设置数据库连接的相关信息 配置MyBatis xml的保存路径和xml命名规范 MyBatis模式开发 创建一个实体类 创建MyBatis…

AI换脸系统开发源码交付

AI换脸系统软件的发展趋势包括以下几个方面: 定制化和智能化:随着用户需求的不断增加,AI换脸系统将向更加定制化和智能化的方向发展,通过数据分析和用户画像等手段,为用户提供更加个性化的服务。 多模态应用&a…

通达信头肩底形态选股公式,突破波峰发出信号

本文将为大家介绍头肩底形态选股公式的编写方法,相较于前两篇文章介绍的N字形态和W底形态,头肩底形态更为复杂,包含3个波谷和2个波峰。 头肩底是一种反转形态,在下降趋势之后形成,其完成标志着趋势的改变。该形态包含三…

谷歌浏览器 | Chrome DevTools系统学习篇-Device Mode

大家好,文接上回谷歌浏览器 | Chrome DevTools系统学习篇-概述。所谓“工欲善其事,必先利其器”,我们进一步来熟悉谷歌开发者工具。今天分享的是Device Mode,使用设备模式来估算您的页面在移动设备上的外观和性能。 设备模式是 Ch…

java顺序表——ArrayList详解

1.顺序表的概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 2.自己实现一个顺序表——MyArrayList 2.1 顺序表成员变量的定义 public class MyArrayList {public static int FEFAU…

优思学院|什么是精益生产?企业如何实现精益生产?

简介 在现代工业社会中,企业的生产效率和质量管理是其生存和发展的关键因素之一。而精益生产作为一种高效的生产管理模式,已经成为了众多企业提升效率和质量的首选。优思学院[1]在本文将对精益生产进行详细的介绍,并提供企业实现精益生产的实…

【Java零基础入门篇】第 ④ 期 - 继承(二)

博主:命运之光 专栏:JAVA入门 学习目标 1.掌握继承性的主要作用、实现、使用限制; 2.掌握this和super的含义及其用法; 3.掌握方法覆写的操作; 4.掌握final关键字的使用; 5.掌握类变量、实例变量和局部变量的…

【应用场景详解】Web自动化测试适用于哪些场景?看完这篇文章你就知道了

【从入门到实战】WEB自动化测试基础教程,手把手教你封装自己的测试框架! 目录 前言: 一、什么是web自动化测试? 二、Web自动化测试的应用场景 三、Web自动化测试的实现方法 1.安装Selenium 2.编写测试用例 四、Web自动自动…

第十二章 使用DHCP动态管理主机地址

文章目录 第十二章 使用DHCP动态管理主机地址一、动态主机地址管理协议1、DHCP简介2、DHCP常见术语 二、部署DHCP服务程序1、安装DHCP服务程序2、配置文件参考模板3、dhcpd服务程序配置文件中常见参数及作用 三、自动管理IP地址1、机房所用的网络地址以及参数信息2、关闭虚拟网…

原装二手Anritsu S331E安立S331L 手持式电缆和天线分析仪

Anritsu S331E Site Master 手持式电缆和天线分析仪涵盖 2 MHz 至 4 GHz 频谱,是无线基站电缆和天线系统安装、配置、维护和故障排除的行业标准。Site Master 准确、多功能、价格合理、坚固耐用,是真正的手持设备,重量不到 5 磅(包…

跨越式升级,敏感数据动态脱敏系统全新而来!

“ 2020年 某医院疫情名单遭工作人员外泄至微信群,涉及6000余人个人身份信息,三人被拘 2021年 某银行未经客户本人授权查询并向第三方提供其个人银行帐户交易信息,被罚450万元 2022年 某银行未落实个人银行账户实名制管理规定&#xff…

民宿企业数字化最佳实践 :我终于跟线下表格和解了

“不由感叹,技术就是生产力啊!” 这是偶来民宿店长在使用了腾讯轻联后不由得发出的感慨。 偶来民宿是一家管理超过100套城市民宿和公寓房源的民宿运营公司,以经营特色化、年轻化、个性化民宿、公寓为主营业务。IF HOUSE为该公司旗下高端民宿…

github copilot如何帮助写代码

Github Copilot是一个基于人工智能的代码助手,可以帮助程序员在编写代码时提供自动补全和建议功能。使用Github Copilot需要以下步骤: 1.注册Github账号并安装Github Copilot插件 首先你需要注册一个Github账号,然后在你使用的代码编辑器中安…

基于netty框架不使用SSL证书,实现websocket数据加密传输

文章目录 简介实现方式主要代码调用方法 1、简介 2、实现方式 3、服务端主要代码 4、客户端主要代码 5、调用方式 简介 为什么不使用SSL证书? 1、服务器运行在专网环境,不能访问互联网。证书有有效期,CA机构规定,证书有效期…

vue3【使用axios并封装axios请求】

第一步:安装axios npm install axios 第二步:编写请求文件 新建request.js 简单的axios封装,里面相关提示信息,自己可以引入element-plus去添加 /**axios封装* 请求拦截、相应拦截、错误统一处理*/ import axios from axios; i…

Linux入门篇-安装CentOS

一、先组织硬件 先把“买”一台空白的电脑,再进行操作系统的安装。 windows中,处理器: 本机 实际运行的时候能当多少个CPU来使呢?16个 处理器的数量是CPU的数量;(本机上一个插槽,就只有一个CP…

同城跑腿能赚多少钱?“爱折腾”的创业者是否值得入局一试?

跑腿服务兴起的最大特点是节省时间和成本。现在城市发展越来越快,真的应该是“时间就是金钱”的道理。帮助人们排队购物、送外卖、送文件、买花、叫醒服务……“跑腿”在生活中无处不在。 同城跑腿系统的前景有多大? 一方面,外卖和网上购物…

深入学习MYSQL-使用触发器

触发器 每个表最多支持6个触发器,(insert,update,delete)之前和之后。 删除触发器 drop trigger trigger_name;insert 触发器  在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入…

第一章--Java语言概述

一 Java知识脉络图 1.1 Java基础全程脉络图 1.2 本章专题与脉络 二 计算机的硬件与软件 2.1 计算机组成:硬件软件 2.2 CPU、内存与硬盘 CPU(Central Processing Unit,中央处理器) 人靠大脑思考,电脑靠CPU来运算、控…