22_匿名函数
匿名函数
* 语法
* (参数列表)=>{函数体}
* 示例 (x: Int, y: Int) => {x / y}
* 使用场景
* 函数作为 实参 传递时
* 极简原则
* 参数类型可以省略, 会根据 形参自动推断
* 参数类型省略后,且当只有一个参数时,可以省略 (),参数>1时,不可省略
* 当函数体只有一行时,可以省略 {}
* 当方法体内只 使用一次参数时,形参的名称和=>可以 省略,方法体内用 _ 代替
* 注意事项
* 匿名函数,不需要写返回值类型
*
* */
/** * @author gaocun * @create 2021-10-20 8:01 AM */ object 匿名函数_05 { /* * 匿名函数 * 语法 * (参数列表)=>{函数体} * 示例 (x: Int, y: Int) => {x / y} * 使用场景 * 函数作为 实参 传递时 * 极简原则 * 参数类型可以省略, 会根据 形参自动推断 * 参数类型省略后,且当只有一个参数时,可以省略 (),参数>1时,不可省略 * 当函数体只有一行时,可以省略 {} * 当方法体内只 使用一次参数时,形参的名称和=>可以 省略,方法体内用 _ 代替 * 注意事项 * 匿名函数,不需要写返回值类型 * * */ def main(args: Array[String]): Unit = { //定义函数 def sum(x: Int, y: Int): Int = x + y def mul(x: Int, y: Int): Int = x * y // 定义 带函数指针参数的函数 def twoNumber(pt: (Int, Int) => Int, x: Int, y: Int): Int = pt(x, y) //调用 - 传入定义好的函数 println(twoNumber(sum, 4, 2)) //调用 - 出入匿名函数(标准调用) println(twoNumber((x: Int, y: Int) => { x / y }, 4, 2)) //极简原则 - 参数类型可以省略, 会根据 函数定义 twoNumber 时,形参自动推断 println(twoNumber((x, y) => { x / y }, 4, 2)) //极简原则 - 参数类型省略后,且当只有一个参数时,可以省略 (),参数>1时,不可省略 //极简原则 - 匿名函数如果只有一行,则大括号也可以省略 println(twoNumber((x, y) => x / y, 4, 2)) //极简原则 - 当方法体内只 使用一次参数时,形参的名称和=>可以 省略,方法体内用 _ 代替 println(twoNumber(_ / _, 4, 2)) println("========扩展练习==========") /*扩展练习*/ /* 练习 1:定义一个匿名函数,并将它作为值赋给变量 fun。函数有三个参数,类型分别 * 为 Int,String,Char,返回值类型为 Boolean. * 要求调用函数 fun(0, “”, ‘0’)得到返回值为 false,其它情况均返回 true。 * * */ var fun = (x: Int, y: String, z: Char) => { if (x == 0 && y == "" && z == '0') false else true } println(fun(0, "", '0')) println(fun(1, "", '0')) /* * 练习 2: 定义一个函数 func,它接收一个 Int 类型的参数,返回一个函数(记作 f1)。 * 它返回的函数 f1,接收一个 String 类型的参数,同样返回一个函数(记作 f2)。 * 函数 f2 接 收一个 Char 类型的参数,返回一个 Boolean 的值。 * 要求调用函数 func(0) (“”) (‘0’)得到返回值为 false,其它情况均返回 true。 * * */ def func(x: Int) = { println("func进入") def f1(str: String) = { println("f1进入") def f22(ch: Char): Boolean = { println("f22进入") if (ch == '0') false else true } f22 _ } f1 _ } println(func(0)("")('1')) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界