宜昌市网站建设_网站建设公司_Node.js_seo优化
2025/12/26 16:27:44 网站建设 项目流程
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("执行加载完成")}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询