scala高阶函数

Posted 大数据开发笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala高阶函数相关的知识,希望对你有一定的参考价值。

1.嵌套函数

可以在 Scala函数内定义函数,定义在函数内的函数称之为局部函数。

 def sum(a: Int, b: Int): Int = {
var sum = a + b
def add(num: Int): Int = {
return sum + num
}
add(10)
}
println(sum(10, 10))//30

注意如何调用里面的函数就ok.

2.偏应用函数

偏应用函数是一种表达式,不需要提供完整的参数只需要提供部分。

2.1案例
 def main(args: Array[String]): Unit = {
// 一般用法
printlog(new Date(), "this is a log")
//偏应用函数
val date = new Date()
val mylog: String => Unit = printlog(date, _: String)

mylog("this is mylog!!!")
//结果
//Tue Apr 06 18:45:04 CST 2021:this is a log
//Tue Apr 06 18:45:04 CST 2021:this is mylog!!!
}
def printlog(date: Date, content: String): Unit = {
println(date + ":" + content)
}

3.高阶函数

高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数

3.1.参数为函数的高阶函数

案例一

    val fun1: (Int, (Int, Int) => Int) => Int = (x: Int, f: (Int, Int) => Int) => {
x + f(1, 2)
}
val f1: (Int, Int) => Int = (x: Int, y: Int) => {
x + y
}
println(fun1(1, f1))
//4

案例二

  def main(args: Array[String]): Unit = {
def add(a:Int,f:(Int,Int)=>Int)={
a+f(10,100)
}
val res = add(50, (x, y) => x + y)
println(res)
//160
}

3.2.返回值为函数的高阶函数

案例

 def add(a: Int, b: Int): (String, String) => String = {
def concat(x: String, y: String) = a + b + x + y
concat
}

val res1: (String, String) => String = add(1, 2)
val res: String = res1("a", "b")
println(res)
println(add(1, 2)("x", "y"))
//3ab
//3xy
}

3.3返回值和参数都是函数的高阶函数

案例

  def main(args: Array[String]): Unit = {

def add(f:(Int,Int)=>Int):(Int,Int)=>Int={
f
}
val res = add((x, y) => x + y)(3, 4)
println(res)
println(add(_+_)(1,2))
//7
//3
}


以上是关于scala高阶函数的主要内容,如果未能解决你的问题,请参考以下文章

Scala函数及其高阶应用

[Scala函数特性系列]——高阶函数

快学Scala(12)--高阶函数

Scala快速入门--异常处理泛型高阶函数隐式转换

Scala高阶

scala高阶函数学习