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

Spark-Scala语言实战(3)

在之前的文章中,我们学习了如何在来如何在IDEA离线和在线安装Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-Scala语言实战(2)(在IDEA中安装Scala,超详细配图)-CSDN博客icon-default.png?t=N7T8https://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…...

线性表的顺序表示(顺序表)

静态分配&#xff1a; #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中&#xff0c;Future是一种表示异步操作结果的对象。它代表了一个可能已经完成或尚未完成的计算&#xff0c;可以用来处理异步任务。Flutter提供了多种工厂方法来创建Future对象&#xff0c;每种方法都有其特定的用途和优势。在本文中&#xff0c;我们将深入探讨Flut…...

python的BBS论坛系统flask-django-nodejs-php

为了更好地发挥本系统的技术优势&#xff0c;根据BBS论坛系统的需求&#xff0c;本文尝试以B/S架构设计模式中的django/flask框架&#xff0c;python语言为基础&#xff0c;通过必要的编码处理、BBS论坛系统整体框架、功能服务多样化和有效性的高级经验和技术实现方法&#xff…...

vulnhub-----pWnOS1.0靶机

文章目录 1.信息收集2.漏洞测试3.爆破hash4.提权 首先拿到一台靶机&#xff0c;就需要知道靶机的各种信息&#xff08;IP地址&#xff0c;开放端口&#xff0c;有哪些目录&#xff0c;什么框架&#xff0c;cms是什么&#xff0c;网页有什么常见的漏洞&#xff0c;如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前端笔记+表单练习+五彩导航

一、笔记 表单&#xff1a;数据交互的一种方式 登录、注册、搜索 <from> <input type""> --- <input type"text"> --- 普通输入框&#xff0c;内容在一行显示 <input type"password"> --- 密码框 <input type"…...

软件架构和基于架构的软件开发方法知识总结

一、软件架构定义 软件架构为软件系统提供了一个结构、行为和属性的高级抽象 软件架构是一种表达&#xff0c;使软件工程师能够&#xff1a; &#xff08;1&#xff09;分析设计在满足所规定的需求方面的有效性 &#xff08;2&#xff09;在设计变更相对容易的阶段&#xff0c;…...

环信新版单群聊UIKit集成指南——Android篇

前言 环信新版UIKit已重磅发布&#xff01;目前包含单群聊UIKit、聊天室ChatroomUIKit&#xff0c;本文详细讲解Android端单群聊UIKit的集成教程。 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开发的一款即时通讯 UI 组件库&#xff0c;提供各种组件实现会话列表、聊天界…...

最细致最简单的 Arm 架构搭建 Harbor

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; ARM离线版本安装 官方提供了一个 arm 版本&#xff0c;但是好久都没更新了&#xff0c;地址&#xff1a;https://github.com/goharbor/harbor-arm 。 也不知道为什么不更新&#xff0c;我看…...

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属性用于在元素框上添加阴影效果。它可以为元素提供外阴影或内阴影&#xff0c;并且可以控制阴影的颜色、偏移距离、模糊半径以及扩展半径。 box-shadow属性的基本语法如下&#xff1a; box-shadow: h-shadow v-shadow blur spread color inset;下面是各个参数…...

递归的个人总结

递归函数&#xff08;递去、回归&#xff09;是函数不断的调用自己&#xff1b; 可以按照如下来理解&#xff1a;func1中调用func2&#xff0c;func2中调用func3; func3函数返回了&#xff0c;继续执行func2中的语句&#xff1b;func2执行完了&#xff0c;继续执行func1之后的…...

使用PDFBox调整PDF每页格式

目录 一、内容没有图片 二、内容有图片 maven依赖&#xff0c;这里使用的是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的宠物用品销售系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31…...

Qwen及Qwen-audio大模型微调项目汇总

Qwen及Qwen-audio可微调项目调研 可用来微调方法/项目汇总ps.大语言模型基础资料 可用来微调方法/项目汇总 Qwen github 项目自带的finetune脚本 可以参考https://blog.csdn.net/qq_45156060/article/details/135153920PAI-DSW中微调千问大模型&#xff08;阿里云的一个产品&a…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...