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

【scala】匿名函数和高阶函数

packagecom.hdfs.functaionobjectAnonymous{defmain(args:Array[String]):Unit={AnonymousFunction println(normalcalc(2,3,4))println(curriedCalc(2)(3)(4))println(curriedCalcee(2)(3)(4))}defAnonymousFunction():Unit={/** * 匿名函数,函数字面量,没有命令的函数 * (参数列表)=>表达式 */valadd=(x:Int,y:Int)=>x+y println(add(4,7))}defnormalcalc(a:Int,b:Int,c:Int):Int=a*b+cdefcurriedCalc(a:Int)(b:Int)(c:Int):Int=a*b+cdefcurriedCalcee(a:Int):Int=>Int=>Int={(b:Int)=>(c:Int)=>a*b+c}// 高阶函数:参数1=列表,参数2=处理函数(Int=>String),返回处理后的新列表defprocessNumber(nums:List[Int],f:Int=>String):List[String]={nums.map(f)}//调用:传入不同的匿名函数作为处理逻辑valnumbers=List(1,2,3,4)//场景1:将数字转为”数字-偶数/奇数“格式valevenOddDesc=processNumber(numbers,num=>s"$num${if(num%2==0)"偶数"else"奇数"}")println(evenOddDesc)// 场景2:将数字转换为平方字符串(简化为占位符语法)valsquareDesc=processNumber(numbers,num=>s"${num}的平方=${num*num}")println(squareDesc)// 高阶函数:接收操作类型,返回(Int,Int)=> Int类型的函数defgetCalculator(op:String):(Int,Int)=>Int={opmatch{case"+"=>(a,b)=>a+b// 返回加法匿名函数case"*"=>(a,b)=>a*b// 返回乘法匿名函数case"-"=>(a,b)=>a-b// 返回减法匿名函数case_=>(_,_)=>0// 默认返回0}}// 调用:先获取函数,在执行计算valaddFunc=getCalculator("+")valmulFun=getCalculator("*")println(addFunc(3,4))println(mulFun(3,4))// 即接受又返回函数(函数装饰器)//高阶函数:接收一个计算函数,返回增强后的函数defwithLog(f:(Int,Int)=>Int):(Int,Int)=>Int={(a,b)=>{println(s"开始计算:$a$b")valresult=f(a,b)// 执行原函数println(s"计算完成,结果:$result")result}}// 原普通函数defadd(a:Int,b:Int):Int=a+b// 增强后函数valaddWithLog=withLog(add)privatevali:Int=addWithLog(10,20)println("[i] "+i)/** * Scala内置高阶函数 */valnums=List(1,2,3,4,5)privatevalints:List[Int]=nums.filter(_%2==0)println("[ints] "+ints)privatevalints1:List[Int]=nums.map(_*2)println("[ins1] "+ints1)privatevalsum:Int=nums.reduce(_+_)println("[sum] "+sum)// fold:带初始值的reduceprivatevali1:Int=nums.fold(10)(_+_)println("[i1] "+i1)// flatmap:扁平化映射privatevalwords:List[String]=List("Hello Scala","Hello Functional")privatevalflatWords:List[String]=words.flatMap(_.split(",")).flatMap(_.split(" "))println("[flatWords] "+flatWords)/** * 高阶函数核心总结 * 用法类型 核心场景 示例函数 * 接收函数作为参数 集合处理、Spark RDD 转换 map/filter/reduce * 返回函数作为结果 函数工厂、柯里化、参数固定 getCalculator * 既接收又返回函数 函数增强(日志、缓存、异常处理) withLog * 高阶函数的核心价值是逻辑解耦:将「通用流程」(如遍历、聚合)和「具体业务逻辑」(如计算、过滤条件)分离,大幅提升代码复用性和可读性。 */deflog(level:String)(model:String)(msg:String):Unit={println(s"[$level][$model][$msg]")}valriskInfoLog=log("INFO")("测试系统")_ riskInfoLog("数据处理完成")riskInfoLog("执行加载完成")}
http://www.rkmt.cn/news/158641.html

相关文章:

  • 【Java毕设源码分享】基于springboot+vue的大学生校园线上招聘系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Mac开发者福音】:Open-AutoGLM 苹果平台支持倒计时,3大关键技术突破揭秘
  • 图形旋转与翻折典型题型全解析
  • 2025跨境电商办公室租赁、出租推荐,全产业链园区私藏5家优选、避坑必看 - 品牌2026
  • 彻底解放双手!基于电鱼智能 RK3308 的“语音控杆”智能垂钓助手方案
  • 2025年上海双主轴定制服务口碑榜发布,前三甲揭晓,双主轴双排刀/插补Y/三轴机/双主轴/尾顶机/4+4车铣/排刀机双主轴厂家推荐排行 - 品牌推荐师
  • 使用 GitHub Pages 发布 D3 可视化项目
  • 架构决策的思维框架:在技术选择的十字路口,如何做出不后悔的选择
  • C语言char类型详解:字符与整数的转换
  • 2025年咸阳值得信赖的装修设计公司,pur封边/颗粒板/水包沙/美式欧式/电视柜/小红砖/钢筋工/门窗/全屋定制装修设计企业推荐榜 - 品牌推荐师
  • PS制作光滑塑料质感文字特效教程
  • 10大企业级Agentic AI架构全解析:从入门到实战,破解AI Agent落地难题
  • 紧急通知:Open-AutoGLM即将闭源!现在不搭就再也拿不到代码了
  • 2025年肃宁县眼镜店品牌实力推荐榜:时光眼镜/双十二眼镜品牌精选 - 品牌推荐官
  • 鱼探仪去 X86 化:电鱼智能 RK3588 提供高性能国产化架构平替
  • 节能与新能源汽车技术路线图2.0发布
  • Vue实战:分页、HTTP封装与农历日历高亮
  • 3ds Max模型与Vray材质如何高效转C4D Octane
  • 【Open-AutoGLM与豆包技术深度解析】:揭秘AI自动代码生成背后的黑科技
  • 高清在线测试视频资源合集(含多分辨率MP4链接)
  • 【12G】供热空调设计全套资料包免费下载
  • Ionic Framework发布Vue版本更新与修复
  • 【紧急收藏】Open-AutoGLM刷机失败怎么办?这7种解决方案必须知道
  • 拒绝“乱跑”!基于电鱼智能 AM3354 的全天候打窝船精准航迹控制方案
  • 【Open-AutoGLM 支持苹果吗】:深度解析苹果生态下的AI大模型兼容性与部署方案
  • 还在手动写测试用例?Open-AutoGLM一键生成方案大曝光
  • WinCC中C脚本数据类型与变量读写详解
  • PPAP流程详解与提交等级解析
  • vue中route和router区别
  • 揭秘Open-AutoGLM与豆包的核心差异:5大维度全面对比(含性能实测数据)