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'))


  }


}
复制代码

 

posted @   学而不思则罔!  阅读(82)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示