尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

【scala】匿名函数和高阶函数
📅 发布时间:2026/6/20 9:57:23
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("执行加载完成")}

相关新闻

  • 【Java毕设源码分享】基于springboot+vue的大学生校园线上招聘系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 【Mac开发者福音】:Open-AutoGLM 苹果平台支持倒计时,3大关键技术突破揭秘
  • 图形旋转与翻折典型题型全解析

最新新闻

  • 黄江镇独立站SEO培训:谷歌自然流量获取实战 - 东莞选校指南
  • 2026长沙积家手表回收实测|岳麓芙蓉双门店实测,正规高价无套路测评 - 薛定谔的梨花猫
  • 2026安徽省蚌埠市中考一两百分怎么办?好就业易上手宠物护理专业最新发 - cc江江
  • 寄大件怎么省钱?2026快递比价全攻略 - 快递物流资讯
  • 白山市奢侈品手表包包回收门店推荐,这5家口碑店回收价格整理 - 谊识预商贸
  • Windows x64下ONNX Runtime 1.18.0 C++ CPU推理开发包(含头文件、静态/动态库及调试符号)

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号