Scala函数式编程初步(高阶函数)

参数式函数

定义一个参数是函数的函数。(完整定义=>匿名函数)

object helloWorld {
  def main(args: Array[String]): Unit = {
    def addxy(x:Int, y:Int):Int=x+y
    def mulxy(x:Int, y:Int):Int=x*y
    def func1(a:Int, b:Int, f:(Int, Int)=>Int):Int={f(a,b)}
    val res1 = func1(1, 2, addxy)
    val res11 = func1(1, 2, (x:Int, y:Int) => x+y)
    val res2 = func1(1, 2, mulxy)
    val res22 = func1(1, 2, (x:Int, y:Int) => x*y)
    println(res1, res11)
    println(res2, res22)
//    println("hello world")
  }
}

可以看到res1和res11的含义是一样的。

我们可以将匿名函数的参数简化:(缺省类型)

object helloWorld {
  def main(args: Array[String]): Unit = {
    def addxy(x:Int, y:Int):Int=x+y
    def mulxy(x:Int, y:Int):Int=x*y
    def func1(a:Int, b:Int, f:(Int, Int)=>Int):Int={f(a,b)}
    val res1 = func1(1, 2, addxy)
    val res11 = func1(1, 2, (x, y) => x+y)
    val res2 = func1(1, 2, mulxy)
    val res22 = func1(1, 2, (x, y) => x*y)
    println(res1, res11)
    println(res2, res22)
//    println("hello world")
  }
}

更进一步
将匿名函数的参数用通配符进行简化:

object helloWorld {
  def main(args: Array[String]): Unit = {
    def addxy(x:Int, y:Int):Int=x+y
    def mulxy(x:Int, y:Int):Int=x*y
    def func1(a:Int, b:Int, f:(Int, Int)=>Int):Int={f(a,b)}
    val res1 = func1(1, 2, addxy)
    val res11 = func1(1, 2, _+_)
    val res2 = func1(1, 2, mulxy)
    val res22 = func1(1, 2, _*_)
    println(res1, res11)
    println(res2, res22)
//    println("hello world")
  }
}

用老师的话来说,化简到没学过就看不懂的地步就到位了。确实,没学过确实看不懂_+_原来就是x+y这么个函数的意思。

返回值式函数的函数

完整定义:

object helloWorld {
  def main(args: Array[String]): Unit = {
    def addxy(x:Int, y:Int):Int=x+y
    def mulxy(x:Int, y:Int):Int=x*y
    def func2(a:Int):(Int, Int) => Int = {
      if(a > 0) addxy
      else mulxy
    }
    println("fun2")
    println(func2(1)(1, 2))
    println(func2(-1)(1, 2))
  }
}

进行简化(使用通配符):

object helloWorld {
  def main(args: Array[String]): Unit = {
    def func1(a:Int, b:Int, f:(Int, Int)=>Int):Int={f(a,b)}
    def func2(a:Int):(Int, Int) => Int = {
      if(a > 0) _+_
      else _*_
    }
    println("fun2")
    println(func2(1)(1, 2))
    println(func2(-1)(1, 2))
  }
}

记录一下,以防以后忘记这新奇玩意。

参考

老师课上的内容

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《Scala函数编程》是一本非常实用的Scala编程书籍,旨在教读者如何使用Scala编程语言实现函数编程。该书通过具体的实例和案例来阐述Scala函数编程的核心概念和技术,包括函数编程基础、函数高阶抽象、类型系统、模匹配、并发编程、I/O 和异常处理等方面内容。这些知识点包含了Scala编程语言的重要概念,可以帮助读者深入掌握Scala函数编程的技术,并在实际应用中运用它们。此外,该书也涵盖了Scala代码风格和整洁性等方面,对编成良好的代码有很大的帮助。总之,这本书对于学习Scala函数编程的人来说是非常有实践价值的一本书籍。 ### 回答2: Scala函数编程的PDF是一本非常有价值的学习资料。对于想要深入学习Scala函数编程的开发者,这本书提供了全面详尽的指导和实践经验,帮助开发者理解函数编程的核心概念和思想,并将其应用于Scala程序开发中。 该书主要包括以下内容: 1.函数编程的基本概念和原则,如不可变性、高阶函数、currying、尾递归等等。 2.函数数据结构和算法的实现,包括列表、栈、队列、树、图等等。 3.如何使用Scala语言支持函数编程的特性,如case class、模匹配、参数化类型、协变和逆变等等。 4.如何使用Scala函数编程框架,如Akka、Spark等来构建高效的分布应用。 这本书主要适合已经有一定Scala编程基础或者其他函数编程语言经验的开发者阅读,由于书中的内容较为深入和专业,对于初学者不太友好。但对于有一定基础的Scala开发者来说,该书是一本非常有价值的参考资料,可以帮助他们更深入地理解Scala函数编程,提高代码质量和开发效率。 ### 回答3: Scala是一种支持函数编程编程语言,从而满足了编程语言发展中对于高度抽象和复杂数据处理的需求。Scala函数编程pdf是一个学习Scala函数编程理论和实践的重要资源。 Scala函数编程pdf包含Scala函数编程核心概念和技术,例如高阶函数、不可变性、模匹配和递归等。它还涵盖了Scala函数编程中的一些常见问题和解决方案,以及Scala函数编程如何与面向对象编程 (OOP)相融合等。 Scala函数编程pdf还提供了丰富的实际案例,包括使用Scala函数编程技术实现算法、数据处理、Web应用程序、分布编程等等。 总之,Scala函数编程pdf是Scala程序员学习和实践函数编程的重要资源,它提供了理论、实践和案例相结合的综合性学习体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Icy Hunter

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

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

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

打赏作者

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

抵扣说明:

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

余额充值