Scala函数(2)-----以函数作为参数


高阶函数
1、以函数作为参数
2、以函数作为返回值

以函数作为参数

    def fun1(f: String => Int): Unit = {

      //调用传进来的函数
      val i: Int = f("100")

      println(i)

    }

这段代码里面,fun1是一个参数为f,没有返回值的函数
而f是一个参数为String返回值为Int类型的函数


这时候调用fun1,就需要传入一个参数为String返回值为Int类型的函数

    def fun1(f:String=>Int): Unit ={
      val i: Int = f("100")
    }

    def f1(str: String): Int =(
      str.toInt
    )

   
    fun1(f1)


    def f2(str: String): Int = {
      (str + "1232123").toInt
    }

    fun1(f2)


    /**
      * 使用lambda 作为参数
      *
      */

    fun1((s: String) => {
      val i: Int = s.toInt
      //最后一行作为返回值
      i
    })

代码运行流程图

在这里插入图片描述

使用lambda作为参数

fun1((s: String) =>{
      val i: Int = s.toInt
      //最后一行作为返回值
      i
    })

简写

如果代码只有一行,括号可以省略

fun1((s: String) => s.toInt + 1)

lambda 的参数类型可以省略(lambda 表达式参数的类型会自动推断)

fun1(s=>s.toInt)

如果lambda的参数只是用来一次可以使用下划线代替

fun1(_.toInt)

以函数作为参数的应用

有一个数组,里面有很多元素,我们对其进行遍历

val arr: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)

foreach:一行一行遍历数组中的元素,将数组中的元素一个一个传递给后面的函数,foreach将循环之后需要做的处理交给调用者,调用者传一个函数进去

    arr.foreach((i:Int) =>{
    println(i+1)
   })

简写:

arr.foreach(i => println(i + 1))

或者:

arr.foreach(println(_))

println是一个参数为Any没有返回值的函数
arr.foreach需要的是参数为Int没有返回值的函数
scala函数的调用也符合多态的思想

简写最终:

arr.foreach(println)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被迫内卷的学习记录

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值