Scala之函数的高级特性

本文详细介绍了传名调用、指定参数名、默认值、可变长参数、递归、高阶函数等Java/Scala编程中的关键概念。通过实例演示了如何灵活运用这些技术,提升代码效率和可读性。

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

1.传名调用

概述
当正真用到该函数的返回值的时候才会调该函数
实例
普通方式调用
代码
 

 def main(args: Array[String]): Unit = {
    f2(f1())
  }
  def f1(): Int ={
    println("f1")
    return 1
  }
  def f2(a:Int): Unit ={
    println("f2")
    println(a)
  }
  - 输出结果

输出结果:

f1
f2
1
  - 结论 : 虽然没有用到值a,但是会先执行f1

传名调用
语法: 参数 : =>类型 注意冒号后面一定要有空格
代码

  def main(args: Array[String]): Unit = {
    f2(f1())
  }
  def f1(): Int ={
    println("f1")
    return 1
  }
  def f2(a: =>Int): Unit ={
    println("f2")
    println(a)
  }
  - 输出结果
f2
f1
1
  - 结论 : 仅在使用到变量a的时候才会调用方法f1

2.指定参数名调用

概述
参数太多时记不住参数的顺序可以指定参数名称传值
示例
 

  def f3(name:String,age:Int)={
      println(name+age)
    }
    f3(age=10,name = "张三")

3.参数默认值

概述
给参数设置默认值,如果如果不传该参数就用默认值
示例

def f5(name:String="antg")={
      println(name)
    }
f5()

4.可变长参数

概述
当参数的数量不确定时,可以使用该技术
示例

def f4(str:String*): Unit ={
      str.foreach(x=>println(x))
    }
f4("1","2","3")

5.递归函数

概述
函数自己调用自己就是递归函数
注意两点
递归的终止条件
递归的公式
示例

def f6(n:Int):Int={
      if(n==1){
        return 1
      }
      n*f6(n-1)
    }
    println(f6(5))


6.高阶函数

概述
参数或者返回值是函数的函数既高阶函数
示例
 

   //参数是函数的函数
    def f7(f:(Int)=>Unit)={
      f(10)
    }
    f7((x:Int)=>println(x))
    //返回值是函数的函数
    def f8(y:Int):(Int)=>Unit={
      return (x:Int)=>println(x*y)
    }
    var f8r = f8(10)
    f8r(2)


7.内嵌函数

概述
函数中可以再创建函数
示例   

 //内嵌函数
    def f9()={
      def f()={
        println("这是一个内嵌函数")
      }
      f()
    }
    f9()


8.匿名函数

概述
没有名称的函数
使用 => 来分隔函数定义与函数体
示例
        

//匿名函数
    val f10 = (x:String)=>println(x)
    f10("123")

9.偏应用函数

概述
如果一个函数被调用多次且其中的一个变量不变,那么就可以使用偏应用函数
示例
 

  //偏应用函数
    def f11(name:String,hello:String)={
      println(name+"--"+hello)
    }
    val f12 = f11("张三",_)
    f12("早上好")
    f12("中午好")
    f12("晚上好")

10.函数柯里化

概述
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
简单来说柯里化就是固定某些参数,然后返回一个仅有一个参数的函数的计算机技术
示例
    //函数柯里化
    //传统add的方法的实现
 

  def f13(a:Int,b:Int)={
      println(a+b)
    }
    f13(10,20)
        //柯里化实现
    def f14(a:Int)=(b:Int)=>println(a+b)
    def f15(a:Int)(b:Int)=println(a+b)
    //使用
    val f16 = f14(3)
    f16(4)
    f16(5)
    f16(6)
    var f17 = f15(3)(_)
    f17(4)
    f17(5)
    f17(6)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mizui_i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值