Spark-Scala语言实战(3)
在之前的文章中,我们学习了如何在来如何在IDEA离线和在线安装Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。
Spark-Scala语言实战(2)(在IDEA中安装Scala,超详细配图)-CSDN博客
https://blog.csdn.net/qq_49513817/article/details/136719556?spm=1001.2014.3001.5501
目录
一、知识回顾
二、函数
1.无参函数
2.带参函数
3.匿名函数
三、任务实现
拓展-
一、知识回顾
在之前的文章中,我们学习了定义常量变量和数组,以及九九乘法表的实现。
相信定义的方法大家没有忘记吧


无非就是val和var的区别,一个是常量,一个是变量,很好理解记忆,主要是要了解它们的用法。
其次,在上一篇文章结尾我们也了解到了一些常见的函数。
今天,我就来教大家如何定义函数。
二、函数
1.无参函数
我们先从简单的无参函数开始,我只需要我的函数给我输出一个"Hello, World!",该怎么操作呢?接着往下看。
def greet(): Unit = {println("Hello, World!")
}greet() // 调用函数,输出 "Hello, World!"
这样,我们就定义了一个名为greet的函数,它的内容很简单,就是输出我们所需的"Hello, World!",来看看效果吧。

2.带参函数
在带参函数中,其实和无参的区别不大,但是要注意我们的调用方法。
def add(a: Int, b: Int): Int = { a + b
} val sum = add(3, 4) // 调用函数,并将结果赋值给变量sum
println(sum) // 输出 7
我们首先定义了一个add函数,再把它作完相加的值赋给sum,然后输出sum,来看看效果吧。

3.匿名函数
在Scala中,匿名函数是一种没有名称的函数,它们常常作为参数传递给其他函数,或者在某些情况下直接用于表达简单的逻辑。Scala的匿名函数是通过=>符号来定义的,它左侧是参数列表,右侧是函数体。
来个简单的匿名函数看看
val add = (a: Int, b: Int) => a + b
val sum = add(3, 4) // 调用匿名函数,并将结果赋值给变量sum
println(sum) // 输出 7

可能单单一个大家看不出来区别,再来个难的
匿名函数作为返回值
def createMultiplier(factor: Int): Int => Int = { (num: Int) => num * factor // 返回匿名函数
} val triple = createMultiplier(3) // 创建一个函数,该函数将输入的数字乘以3
val result = triple(5) // 调用返回的函数,并将结果赋值给变量result
println(result) // 输出 15

这样就很直观吧,多做对比。
三、任务实现
用Scala写一个电话号码归属地以输入的号码前几位的字段来区分,在输入号码后告知是联通移动电信还是错误的号码,号码字段用数组来存贮。
object p2 {// 假设电话号码的前三位或四位代表不同的运营商// 这里使用数组来存储号码字段和对应的运营商val phonePrefixes = Array(("130", "131", "132", "155", "156", "185", "186", "1709") -> "联通",("134", "135", "136", "137", "138", "139", "150", "151", "152", "157", "158", "159", "182", "183", "184", "187", "188", "198", "1705", "1340") -> "移动",("133", "153", "180", "181", "189", "1700") -> "电信")// 函数来根据号码前缀判断运营商def classifyPhoneNumber(phoneNumber: String): String = {// 提取号码的前几位作为前缀val prefix = phoneNumber.take(4) // 假设前四位是足够的// 查找前缀对应的运营商phonePrefixes.find(_._1.contains(prefix)).map(_._2).getOrElse("错误的号码")}// 程序的入口点def main(args: Array[String]): Unit = {val phoneNumber = "13800138000" // 示例号码,请替换为实际输入的号码val operator = classifyPhoneNumber(phoneNumber)println(s"号码 $phoneNumber 的归属运营商是: $operator")}}
我在 find 方法中使用了一个匿名函数 prefixSet => prefixSet._1.contains(prefix) 这样做是为了提高代码的可读性,并且使类型推断更加明确。
现在,编译并运行这个代码,它应该可以正确地根据电话号码前缀判断归属运营商了。
拓展-scala自定函数的种类作用
| 函数种类 | 描述 | 作用 |
|---|---|---|
| 成员函数 | 定义在类的内部,作为类的成员 | 成员函数能够访问和修改类的内部状态,实现对象的行为和属性。它们是面向对象编程的基石,允许通过对象来执行操作。 |
| 本地函数 | 定义在另一个函数内部 | 本地函数用于封装一段特定的逻辑,只在其定义的函数内部可见和使用。它们可以提高代码的可读性和可维护性,通过将复杂的逻辑分解为更小的函数。 |
| 匿名函数 | 没有函数名,通过=>来连接参数列表和方法体 | 匿名函数可以作为参数传递给其他函数,也可以作为返回值返回。它们常用于高阶函数中,作为回调函数或谓词使用。匿名函数的灵活性使得代码更加简洁和易读。 |
| 高阶函数 | 将函数作为参数传递或返回的函数 | 高阶函数允许将函数作为一等公民来处理,可以像处理其他数据类型一样传递和返回函数。这使得代码更加模块化和可重用,能够编写更加抽象和通用的函数。 |
| 函数种类 | 描述 | 作用 |
|---|---|---|
| 柯里化函数(Curried Functions) | 将一个接受多个参数的函数转换为一系列接受单一参数的函数 | 柯里化函数允许我们将复杂的函数分解为一系列更简单的函数,从而增强函数的复用性和可读性。 |
| 偏函数(Partial Functions) | 只定义在其定义域子集上的函数 | 偏函数在处理某些特定条件或异常情况时非常有用,它们允许我们定义只在某些输入上有效的函数。 |
| 递归函数(Recursive Functions) | 在函数体内部调用自身的函数 | 递归函数常用于处理树形结构或需要重复执行的任务,它们通过将问题分解为更小的子问题来解决复杂的问题。 |
| 尾递归函数(Tail Recursive Functions) | 递归调用出现在函数体的最后位置(即尾部)的函数 | 尾递归函数在Scala中经过优化,可以避免栈溢出的问题,从而允许处理更大的数据集。 |
| 隐式函数(Implicit Functions) | 通过隐式转换和隐式参数自动应用的函数 | 隐式函数提供了在编译时自动插入转换和参数的机制,从而简化代码并增强类型安全性。 |
相关文章:
Spark-Scala语言实战(3)
在之前的文章中,我们学习了如何在来如何在IDEA离线和在线安装Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark-Scala语言实…...
diffusion model(十四): prompt-to-prompt 深度剖析
infopaperPrompt-to-Prompt Image Editing with Cross Attention Controlgithubhttps://github.com/google/prompt-to-promptOrg:Google Research个人复现https://github.com/myhz0606/diffusion_learning个人博客主页http://myhz0606.com/article/p2p 1 前言 基于扩散模型&a…...
线性表的顺序表示(顺序表)
静态分配: #include <stdbool.h> #include <stdio.h>typedef int ElementType;#define MaxSize 50 typedef struct {ElementType data[MaxSize];int length; }SqList;//初始化 //SqList L; void InitList(SqList L) {L.length 0; }//插入 bool ListIn…...
矩阵A的LU分解
文章目录 1. 矩阵的逆矩阵1.1 AB的逆矩阵1.2 转置矩阵 2. 2X2矩阵A消元3. 3X3矩阵A消元4. 运算量5. 置换矩阵-左行右列 本文主要目的是为了通过矩阵乘法实现矩阵A的分解。 1. 矩阵的逆矩阵 1.1 AB的逆矩阵 假设A,B矩阵都可逆 A ( B B − 1 ) A − 1 I (1) A(BB^{-1})A^{-1}…...
深入了解Flutter中Future的全部工厂方法及使用
在Flutter中,Future是一种表示异步操作结果的对象。它代表了一个可能已经完成或尚未完成的计算,可以用来处理异步任务。Flutter提供了多种工厂方法来创建Future对象,每种方法都有其特定的用途和优势。在本文中,我们将深入探讨Flut…...
python的BBS论坛系统flask-django-nodejs-php
为了更好地发挥本系统的技术优势,根据BBS论坛系统的需求,本文尝试以B/S架构设计模式中的django/flask框架,python语言为基础,通过必要的编码处理、BBS论坛系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法ÿ…...
vulnhub-----pWnOS1.0靶机
文章目录 1.信息收集2.漏洞测试3.爆破hash4.提权 首先拿到一台靶机,就需要知道靶机的各种信息(IP地址,开放端口,有哪些目录,什么框架,cms是什么,网页有什么常见的漏洞,如sql注入&…...
vue 消息左右滚动(前后无缝衔接)
演示效果 封装的组件 <!--* Author:* Date: 2024-03-21 19:21:58* LastEditTime: 2024-03-21 20:31:50* LastEditors: Please set LastEditors* Description: 消息左右滚动 --> <template><divid"textScroll"class"text-scroll"mousemove&…...
Qt如何直接处理系统事件(比如鼠标事件),而不是post事件
#include <QtGui/5.15.2/QtGui/qpa/qwindowsysteminterface.h> // 方便调试事件 QWindowSystemInterface::setSynchronousWindowSystemEvents(true); 直接再 qWindowsWndProc函数中处理 通常情况: 事件被放到一个队列中...
Web前端笔记+表单练习+五彩导航
一、笔记 表单:数据交互的一种方式 登录、注册、搜索 <from> <input type""> --- <input type"text"> --- 普通输入框,内容在一行显示 <input type"password"> --- 密码框 <input type"…...
软件架构和基于架构的软件开发方法知识总结
一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达,使软件工程师能够: (1)分析设计在满足所规定的需求方面的有效性 (2)在设计变更相对容易的阶段,…...
环信新版单群聊UIKit集成指南——Android篇
前言 环信新版UIKit已重磅发布!目前包含单群聊UIKit、聊天室ChatroomUIKit,本文详细讲解Android端单群聊UIKit的集成教程。 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库,提供各种组件实现会话列表、聊天界…...
最细致最简单的 Arm 架构搭建 Harbor
更好的阅读体验:点这里 ( www.doubibiji.com ) ARM离线版本安装 官方提供了一个 arm 版本,但是好久都没更新了,地址:https://github.com/goharbor/harbor-arm 。 也不知道为什么不更新,我看…...
mysql基础02
1.常用函数 字符串处理函数 length(str) 统计字符长度char_length(str) 统计以(单个字符为单位)的字符长度ucase/upper(str) 小写变大写lcase/lower(str) 大写变小写substr(s,start,end) 从s截start到end的字符串instr(str,"str1") str1在str的位置是? trim(str) 去…...
css的box-shadow详解
CSS的box-shadow属性用于在元素框上添加阴影效果。它可以为元素提供外阴影或内阴影,并且可以控制阴影的颜色、偏移距离、模糊半径以及扩展半径。 box-shadow属性的基本语法如下: box-shadow: h-shadow v-shadow blur spread color inset;下面是各个参数…...
递归的个人总结
递归函数(递去、回归)是函数不断的调用自己; 可以按照如下来理解:func1中调用func2,func2中调用func3; func3函数返回了,继续执行func2中的语句;func2执行完了,继续执行func1之后的…...
使用PDFBox调整PDF每页格式
目录 一、内容没有图片 二、内容有图片 maven依赖,这里使用的是pdfbox的2.0.30版本 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version></dependency>…...
【3D reconstruction 学习笔记】
三维重建 3D reconstruction 1. 相机几何针孔相机摄像机几何 2. 相机标定线性方程组的解齐次线性方程组的解非线性方程组的最小二乘解透镜相机标定带畸变的相机标定 3. 单视图重建2D平面上的变换3D空间上的变换单视测量无穷远点 无穷远线 无穷远平面影消点 影消线单视重构 4. 三…...
(附源码)基于Spring Boot与Vue的宠物用品销售系统设计与实现
前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 ἱ…...
Qwen及Qwen-audio大模型微调项目汇总
Qwen及Qwen-audio可微调项目调研 可用来微调方法/项目汇总ps.大语言模型基础资料 可用来微调方法/项目汇总 Qwen github 项目自带的finetune脚本 可以参考https://blog.csdn.net/qq_45156060/article/details/135153920PAI-DSW中微调千问大模型(阿里云的一个产品&a…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
