当前位置: 首页 > news >正文

Scala_【5】函数式编程

第五章

  • 函数式编程
  • 函数和方法的区别
  • 函数声明
  • 函数参数
    • 可变参数
    • 参数默认值
  • 函数至简原则
  • 匿名函数
  • 高阶函数
    • 函数作为值传递
    • 函数作为参数传递
    • 函数作为返回值
  • 函数闭包&柯里化
  • 函数递归
  • 控制抽象
  • 惰性函数
  • 友情链接

函数式编程

面向对象编程
解决问题时,分解对象,行为,属性,然后通过对象的关系以及行为的调用来解决问题,Scala语言是一个完全面向对象编程语言。万物皆对象
函数式编程
解决问题时,将问题分解成一个一个的步骤,将每个步骤进行封装(函数),通过调用这些封装好的步骤,解决问题,Scala语言是一个完全函数式编程语言。万物皆函数

函数和方法的区别

核心概念

  1. 为完成某一功能的程序指令(语句)的集合,称为函数
  2. 类中的函数称之方法

实际应用

  1. Scala语言的语法非常灵活,可以在任何的语法结构中声明任何的语法
  2. 函数没有重载和重写的概念;方法可以进行重载和重写
  3. scala中函数可以嵌套定义

函数声明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数参数

可变参数

在这里插入图片描述

参数默认值

在这里插入图片描述

函数至简原则

函数至简原则:能省则省

在这里插入图片描述

  • 如果函数明确声明Unit,那么即使函数体中使用return关键字也不起作用
  • 如果函数明确使用return关键字,那么函数返回就不能使用自行推断了,需要声明返回值类型
  • Scala如果想要自动推断无返回值,可以省略等号

匿名函数

没有名字的函数就是匿名函数,可以直接通过函数字面量(表达式)来设置匿名函数
函数字面量定义格式:
val sum: (Int, Int) => Int = (x: Int, y: Int) => x + y

在这里插入图片描述

高阶函数

函数作为值传递

在这里插入图片描述

函数作为参数传递

在这里插入图片描述

函数作为返回值

在这里插入图片描述

函数闭包&柯里化

在这里插入图片描述
在这里插入图片描述

函数递归

一个函数/方法在函数/方法体内又调用了本身,我们称之为递归调用

/*** 1) 方法调用自身* 2) 方法必须要有跳出的逻辑* 3) 方法调用自身时,传递的参数应该有规律* 4) scala中的递归必须声明函数返回值类型*/

在这里插入图片描述

控制抽象

在这里插入图片描述

惰性函数

当函数返回值被声明为lazy时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。这种函数我们称之为惰性函数

在这里插入图片描述

友情链接

  • 上一章
    Scala_【4】流程控制
  • 下一章
    Scala_【6】面对对象

相关文章:

Scala_【5】函数式编程

第五章 函数式编程函数和方法的区别函数声明函数参数可变参数参数默认值 函数至简原则匿名函数高阶函数函数作为值传递函数作为参数传递函数作为返回值 函数闭包&柯里化函数递归控制抽象惰性函数友情链接 函数式编程 面向对象编程 解决问题时,分解对象&#xff…...

解析 World Football Cup 问题及其 Python 实现

问题描述 本文讨论一道关于足球锦标赛排名规则的问题,来自 Berland 足球协会对世界足球规则的调整。题目要求对给定的比赛数据进行计算,并输出能进入淘汰赛阶段的球队列表。以下是规则详细描述。 题目规则 输入格式: 第一行包含一个整数 …...

9.系统学习-卷积神经网络

9.系统学习-卷积神经网络 简介输入层卷积层感受野池化层全连接层代码实现 简介 卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图…...

基于FPGA的出租车里程时间计费器

基于FPGA的出租车里程时间计费器 功能描述一、系统框图二、verilog代码里程增加模块时间增加模块计算价格模块上板视频演示 总结 功能描述 (1);里程计费功能:3公里以内起步价8元,超过3公里后每公里2元,其中…...

三甲医院等级评审八维数据分析应用(五)--数据集成与共享篇

一、引言 1.1 研究背景与意义 随着医疗卫生体制改革的不断深化以及信息技术的飞速发展,三甲医院评审作为衡量医院综合实力与服务水平的重要标准,对数据集成与共享提出了更为严苛的要求。在传统医疗模式下,医院内部各业务系统往往各自为政,形成诸多“信息孤岛”,使得数据…...

VUE条件树查询 自定义条件节点

之前实现过的简单的条件树功能如下图&#xff1a; 经过最新客户需求确认&#xff0c;上述条件树还需要再次改造&#xff0c;以满足正常需要&#xff01; 最新暴改后的功能如下红框所示&#xff1a; 页面功能 主页面逻辑代码&#xff1a; <template><div class"…...

什么是打流,怎么用iperf3打流

什么是打流 在网络安全和黑灰产领域&#xff0c;“打流”具有不同的含义&#xff0c;常用于形容通过技术手段制造流量假象或发起流量攻击。 流量攻击&#xff08;DDoS&#xff09;中的“打流”&#xff1a; “打流”指向目标服务器或网络发起 大规模的数据请求&#xff0c;造…...

使用MySQL APT源在Linux上安装MySQL

全新安装MySQL的步骤 以下说明假定您的系统上尚未安装任何版本的MySQL&#xff08;无论是由Oracle还是其他方分发&#xff09; 添加MySQL的Apt源。 将MySQL的APT存储库添加到系统的软件存储库列表中。 1、转到MySQL APT存储库的下载页面MySQL :: Download MySQL APT Reposi…...

redux react-redux @reduxjs/toolkit

redux团队先后推出了redux、react-redux、reduxjs/toolkit&#xff0c;这三个库的api各有不同。本篇文章就来梳理一下当我们需要在项目中集成redux&#xff0c;从直接使用redux&#xff0c;到使用react-redux&#xff0c;再到react-redux和reduxjs/toolkit配合使用&#xff0c;…...

【偏好对齐】通过ORM直接推导出PRM

论文地址&#xff1a;https://arxiv.org/pdf/2412.01981 相关博客 【自然语言处理】【大模型】 ΨPO&#xff1a;一个理解人类偏好学习的统一理论框架 【强化学习】PPO&#xff1a;近端策略优化算法 【偏好对齐】PRM应该奖励单个步骤的正确性吗&#xff1f; 【偏好对齐】通过OR…...

Python与其他编程语言的区别是什么?

Python是一种广泛使用的高级编程语言&#xff0c;以其简洁的语法、强大的库支持和广泛的应用领域而著称。与其他编程语言相比&#xff0c;Python具有许多独特的特点和优势。以下将从多个方面详细探讨Python与其他编程语言的区别&#xff0c;并通过示例进行说明。 一、语法简洁…...

cuda11.6和对应的cudnn(windows)

因为每次不同的torch版本要下对应的cuda&#xff0c;这次刚好在Windows上下好了一个cuda11.6和对应的cudnn&#xff0c;直接放到网盘中&#xff0c;大家有需要对应版本的可以直接下载&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/f153a53830d4 大家自取&#xff0c;c…...

24年无人机行业资讯 | 12.23-12.29

24年无人机行业资讯 | 12.23-12.29 1、 国家发改委新设低空经济司&#xff0c;助力低空经济规范发展2、商务部支持无人机民用国际贸易&#xff0c;强调出口管制与安全并重3、滨州高新区首架无人机成功下线4、 2025第九届世界无人机大会筹备推进会顺利召开5、2024年世界无人机竞…...

uniapp:微信小程序文本长按无法出现复制菜单

一、问题描述 在集成腾讯TUI后&#xff0c;为了能让聊天文本可以复制&#xff0c;对消息组件的样式进行修改&#xff0c;主要是移除下面的user-select属性限制&#xff1a; user-select: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms…...

qml Item详解

1、概述 Item是QML&#xff08;Qt Modeling Language&#xff09;的基础元素&#xff0c;所有其他可视化元素都继承自它。它代表了一个可视化的对象&#xff0c;虽然Item对象本身没有可视外观&#xff0c;但它定义了所有可视项之间通用的属性&#xff0c;比如位置、大小、旋转…...

【Java回顾】Day4 反射机制

反射机制 之前学过一部分&#xff0c;笔记在20250103Java包_网络编程.md里,这里在之前的笔记的基础上做一些补充。 反射&#xff1a;得到class对象后反向获取对象的各种信息。 包 Field 类或接口中的字段(成员变量)&#xff0c;动态访问和修改类的字段 模板 获取Class 对象 …...

【沉默的羔羊心理学】汉尼拔的“移情”游戏:操纵与理解的艺术,精神分析学视角下的角色互动

终极解读《沉默的羔羊》&#xff1a;弗洛伊德精神分析学视角下的深层剖析 关键词 沉默的羔羊弗洛伊德精神分析学角色心理意识与潜意识性别与身份 弗洛伊德精神分析学简介 弗洛伊德的精神分析学是心理学的一个重要分支&#xff0c;主要关注人类行为背后的无意识动机和冲突。…...

[深度学习] 大模型学习1-大语言模型基础知识

大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一类基于Transformer架构的深度学习模型&#xff0c;主要用于处理与自然语言相关的各种任务。简单来说&#xff0c;当用户输入文本时&#xff0c;模型会生成相应的回复或结果。它能够完成许多任务&…...

如何解决数据库和缓存不一致的问题

目录 一、Cache-Aside模式&#xff08;旁路缓存模式&#xff09; 二、Write-Through模式&#xff08;写透缓存模式&#xff09; 三、Write-Behind模式&#xff08;写回缓存模式&#xff09; 四、先删除缓存再更新数据库&#xff08;不推荐&#xff0c;存在风险&#xff09;…...

剑指Offer|LCR 021. 删除链表的倒数第 N 个结点

LCR 021. 删除链表的倒数第 N 个结点 给定一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head [1], n 1…...

【NX入门篇】

NX入门篇 一、UG NX 由来二、软件如何启动&#xff08;UG NX 12.0&#xff09;三、使用步骤四、常用命令 一、UG NX 由来 UG NX由来&#xff1a; 1969 年&#xff1a;UG 的开发始于美国麦道航空公司&#xff0c;基于 C 语言开发实现&#xff1b;1976 年&#xff1a;UG问世&am…...

ubuntu如何禁用 Snap 更新

.禁用 Snap 更新&#xff08;通过修改 snapd 配置&#xff09; 打开并编辑 /etc/apt/apt.conf.d/50unattended-upgrades文件。 这个文件控制自动更新的行为。 sudo vim /etc/apt/apt.conf.d/50unattended-upgrades 里面有一行将里面的auto改为false即可禁用更新&#xff1a;…...

Spring AI Alibaba-对话模型(Chat Model)

对话模型&#xff08;Chat Model&#xff09;接收一系列消息&#xff08;Message&#xff09;作为输入&#xff0c;与模型 LLM 服务进行交互&#xff0c;并接收返回的聊天消息&#xff08;Chat Message&#xff09;作为输出。相比于普通的程序输入&#xff0c;模型的输入与输出…...

HTML——79.代码快捷输入方式

!DOCTYPE html> <html><head><meta charset"UTF-8"><title>代码快捷输入方式</title></head><body><!--1.父子关系&#xff1a;--><!--div>p 加Tab键--><div><p></p></div><…...

李宏毅机器学习课程笔记01 | 1.Introduction of Machine/Deep Learning

笔记是在语雀上面做的&#xff0c;粘贴在CSND上可能存在格式错误 机器学习的本质就是借助机器寻找一个转换函数 根据函数的输出类型&#xff0c;可以将机器学习进行分类 regression 回归任务&#xff1a;函数输出时一个数值classification 分类任务&#xff1a;人类设定好选项…...

1、pycharm、python下载与安装

1、去官网下载pycharm 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间&#xff0c;去下载python 进入官网地址&#xff1a;https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…...

计算机网络复习(学习通作业4、5、6系统答案)

&#x1f4e2;&#x1f4e2;&#x1f4e2;传送门 一、作业4一. 计算题&#xff08;共1题&#xff0c;100分&#xff09; 二、作业5一. 简答题&#xff08;共1题&#xff0c;30分&#xff09;路由器属于那一层的互联设备&#xff1f;路由器结构包含哪两个部分&#xff1f;请解释…...

javascript 绘制图表的几种方式

JavaScript 中,绘制图表的常用方法是使用图表库,它们提供了便捷的 API 和功能来实现图形和数据可视化。以下是几种常见的 JavaScript 图表绘制库以及如何使用它们来绘制图表的示例: 1. Chart.js Chart.js 是一个轻量级、简单易用的图表库,支持多种图表类型,如线性图、柱…...

【网络协议】开放式最短路径优先协议OSPF详解(四)

前言 在本章的第一部分和第二部分中&#xff0c;我们探讨了OSPF的基本配置&#xff0c;并进一步学习了更多OSPF的概念&#xff0c;例如静态路由的重分发及其度量值。在第三部分中&#xff0c;我们讨论了多区域OSPF。在第四部分中&#xff0c;我们将关注OSPF与多访问网络&#…...

C++STL中algorithm的介绍与使用

C STL中的<algorithm>库提供了一组模板函数&#xff0c;用于操作序列&#xff08;如数组、向量等&#xff09;。以下是一些常用的<algorithm>函数的详细介绍、使用方式和示例&#xff0c;以及在竞赛过程中的一些细节。 1. 非修改性算法 std::find 概念&#xff…...