用一个例子告诉你 什么是scala中的 Lambda表达式

什么是Lambda表达式

由于在scala中,函数是frist-class,函数可以像`数据类型`一样,定义变量并为变量赋值

此时的这个函数字面量就称之为 Lambda表达式


一、声明 Lambda表达式

功能:

        指定 函数的参数个数、参数数据类型、返回值数据类型

标准格式:

        (参数1_数据类型,参数2_数据类型...) => 返回值数据类型

省略格式:

        当只有一个参数时,可以省略 ()

                 数据类型 => 返回值数据类型


二、为 Lambda表达式 赋值

功能:

         指定 函数的具体逻辑

方式1(使用已定义函数):

        函数名称 _ | 函数名称(可以自动类型推断的时候可以省略_)

方式2(使用函数字面量):

标准格式:

         (参数1:数据类型,参数2:数据类型...) => {函数体}

省略格式:

         省略参数的数据类型

               使用条件: 可以根据 显式的声明 做自动类型推断时

               (参数1,参数2...) => {函数体}

         省略 ()

               使用条件: 只有一个参数时,且省略了数据类型

               参数1 => {函数体}

         省略 {}

                使用条件: 函数体只有一行时

         省略 (参数1,参数2...) =>

                使用条件: 所有参数只在函数体内使用1次, 参数名称 用 _ 来代替


三、代码示例

object Lambda extends App {

  // 为自由变量赋值
  val sum: Int => Int = (x: Int) => x + 100
  val sum1: Int => Int = (x) => x + 100 // 省略数据类型
  val sum2: Int => Int = x => x + 100 // 省略数据类型 + ()
  val sum3: Int => Int = _ + 100 // 省略数据类型 + () + 参数名称 =>
  val sum4 = (x: Int) => x + 100 // 变量没有显式的声明数据类型,所以不能使用 省略格式

  /*
  * 思考: 为什么可以省略呢?
  *     因为我们显示的声明了 Lambda的数据类型,编译器可以根据声明的数据类型做自动推断
  *
  * */

 val sum5: (Int,Int,Int) => Int = _ + _ + _


  // 为函数的参数变量赋值(绑定变量)
  def add(x: Int, sum: Int => Int): Int = {
    sum(x) + 100
  }

  def subAdd(x:Int) = x + 100

  add(100,subAdd) // 使用已经定义函数 赋值
  add(100,subAdd _)

  add(100, (x: Int) => x + 100) // 标准格式
  add(100, (x) => x + 100) // 省略数据类型
  add(100, _ + 100) // 省略 (x) =>

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值