scala函数之函数作为参数及返回值

本文探讨Scala中的高阶函数特性,重点讲述如何将函数作为参数和返回值。介绍了map、foreach、filter等常用高阶函数,并通过示例展示了如何编写函数,根据输入条件决定执行加法、减法或乘法操作,以及根据数字能否被3整除和相加结果来生成不同的返回信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高阶函数

高阶函数可以将其他函数作为参数或者使用函数作为输出结果

//函数作为参数
def doSquare(f:Int=>Int,p:Int)=f(p)
def square(x:Int):Int=x*x
doSquare(square,square(2))
//函数作为返回值
//返回类型为函数(Int=>Int)
def doSquare()={
  (x:Int)=>x*x
}
doSquare()(2)

常用高阶函数

  • map
  • foreach
  • filter
  • fold、foldLeft、foldRight
  • reduce
  • zip
  • flatten
  • flatMap
函数作为参数
object test {
  def main(args: Array[String]): Unit = {
    def fun1(a:Int,b:Int):Int=a+b
    def fun2(a:Int,b:Int):Int=a-b
    def fun3(a:Int,b:Int):Int=a*b
    def fun4(a:Int,b:Int):Int=a/b

    def funTest(f:(Int,Int)=>Int,a:String):String={
      val resultValue=f(10,5)
      a+resultValue
    }
    var str=funTest(fun1,"你的价格是:")
    println(str)
  }
}

函数作为返回值

object test {
  def main(args: Array[String]): Unit = {
    def funTest():(String,String)=>String={
      def fun(a:String,b:String):String={
        a+"b"+b+"d"
      }
      fun
    }
    var strValue=funTest()("a","c")
    println(strValue)
  }
}

传入一个字符,判断其长度,长度大于5加法,小于5减法,等于5乘法

object test {
  def main(args: Array[String]): Unit = {
    def funTest(s:String):(Int,Int)=>Int={
      if(s.length>5){
        def jia(a:Int,b:Int):Int={
          a+b
        }
        jia
      }else if(s.length<5){
        def jian(a:Int,b:Int):Int={
          a-b
        }
        jian
      }else{
        def cheng(a:Int,b:Int):Int={
          a*b
        }
        cheng
      }
    }
    var strValue1=funTest("aaaaaa")(10,5)
    var strValue2=funTest("aa")(10,5)
    var strValue3=funTest("aaaaa")(10,5)
    println(strValue1)
    println(strValue2)
    println(strValue3)
  }
}

传入一个数字,判断是否能被3整除,能被整除加法,不能被整除减法

object test {
  def main(args: Array[String]): Unit = {
    def funTest(s:Int):(Int,Int)=>Int={
      if(s%3==0){
        def jia(a:Int,b:Int):Int={
          a+b
        }
        jia
      }else{
        def jian(a:Int,b:Int):Int={
          a-b
        }
        jian
      }
    }
    var strValue1=funTest(3)(10,5)
    var strValue2=funTest(4)(10,5)
    println(strValue1)
    println(strValue2)
  }
}

 传入一个数字,判断是否能被3整除,能被3整除,相加大于等于3000,输出某某的收入很高,相加小于3000,输出某某再加把力;不能被3整除,相加大于等于3000,输出某某是一个节约的人,相加小于3,输出某某要省着点花钱哟

object test {
  def main(args: Array[String]): Unit = {
    def funTest(s:Int):(Int,Int)=>String=>Unit={
      if(s%3==0){
        def yes(a:Int,b:Int):String=>Unit={
          if((a+b)>=3000){
            def show(name:String):Unit={
              println(name+"的收入很高")
            }
            show
          }else{
            def show(name:String):Unit={
              println(name+"再加把力")
            }
            show
          }
        }
        yes
      }else{
        def no(a:Int,b:Int):String=>Unit={
          if((a+b)>=3000){
            def show(name:String):Unit={
              println(name+"是一个节约的人")
            }
            show
          }else{
            def show(name:String):Unit={
              println(name+"要省着点花钱哟")
            }
            show
          }
        }
        no
      }
    }
    funTest(3)(3000,1000)("老王")
    funTest(3)(1000,1000)("老王")
    funTest(4)(3000,0)("老王")
    funTest(4)(1000,1000)("老王")
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值