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("执行加载完成")}【scala】匿名函数和高阶函数
张小明
前端开发工程师
从加密文件中还原WebShell代码的全过程
从加密文件中还原WebShell代码的全过程 最近在排查一台服务器异常行为时,偶然发现了一个极其隐蔽的后门。事情的起点是一条不起眼的日志记录。 当时我正例行检查 Nginx 的访问日志,突然注意到一条路径: GET /uploads/images/2024/glm_decode.…
【大模型开发者必看】Open-AutoGLM源码泄露?内部架构深度拆解与实测体验
第一章:Open-AutoGLM 智谱 源码下载项目背景与源码价值 Open-AutoGLM 是智谱AI推出的一个开源自动化语言模型框架,旨在降低大模型应用开发门槛,支持任务自动分解、工具调用与结果生成。其源码公开为开发者提供了深入理解模型调度机制、自定义…
智谱云手机Open-AutoGLM实战指南:3步实现自动化AI交互
第一章:智谱云手机Open-AutoGLM实战指南概述Open-AutoGLM 是智谱云手机平台推出的一款面向自动化任务与智能交互的开发框架,旨在通过大语言模型驱动移动设备实现智能化操作。该框架结合自然语言理解与设备控制能力,支持开发者以低代码方式构建…
【AI模型权限突破指南】:Open-AutoGLM邀请码获取的5种有效方法
第一章:Open-AutoGLM邀请码获取的核心价值解锁高级功能的钥匙 Open-AutoGLM作为新一代自动化语言模型平台,其核心功能对普通用户存在访问限制。邀请码不仅是身份验证机制,更是开启高级能力的关键凭证。拥有邀请码的用户可访问模型微调、API高…
Open-AutoGLM vs 豆包:谁才是国产AI编程助手的真正王者?
第一章:Open-AutoGLM vs 豆包:国产AI编程助手的格局重塑随着大模型技术在国内快速演进,AI编程助手正成为开发者日常不可或缺的工具。Open-AutoGLM 作为开源社区驱动的智能编程引擎,凭借其透明架构和可定制性,迅速在技术…
揭秘Open-AutoGLM与豆包的核心差异:5大维度全面对比(含性能实测数据)
第一章:Open-AutoGLM与豆包的核心定位解析技术架构背景 Open-AutoGLM 是一个开源的自动化语言模型框架,专注于实现自然语言理解与生成任务的端到端自动化。其设计核心在于模块化推理流程,支持动态任务编排与上下文感知决策。该框架适用于需要…