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高阶函数的主要内容,如果未能解决你的问题,请参考以下文章