scala高阶函数总结

1、值函数

将一个函数赋值给某个变量,此变量就是一个值函数

scala> import scala.math._

import scala.math._

scala> val fun = sqrt _

fun: Double => Double = <function1>

scala> fun(25)

res19: Double = 5.0

2、匿名函数

无名称的函数,即为匿名函数,通常使用在函数的参数中

scala> (1 to 9).reduceLeft(_ + _)

res20: Int = 45

scala> (1 to 9).reduceLeft( (x:Int,y:Int) => x+y)

res21: Int = 45

3、高阶函数

以函数做为参数的函数就是高阶函数

scala> def valueAtQuarter(fun: (Double) => Double) = fun(4)

valueAtQuarter: (fun: Double => Double)Double

scala> valueAtQuarter(scala.math.sqrt _)

res22: Double = 2.0

4、柯里化

将多个参数的函数分离,使其通过两次调用,有点说不清楚,直接上代码。。。

scala> def mul (x: Int,y: Int) = x * y

mul: (x: Int, y: Int)Int

scala> def mul(x : Int) = (y: Int) => x * y

mul: (x: Int)Int => Int

scala> val x=mul(6)

x: Int => Int = <function1>

scala> x(5)

res23: Int = 30

scala> mul(6)(5)

res24: Int = 30

说明:mul(6)(5)先执行mul(6)返回一个函数再调用(5)

scala> def mul(x: Int)(y: Int)= x *y

mul: (x: Int)(y: Int)Int

这种写法比较容易理解,和def mul(x : Int) = (y: Int) => x * y等效

5、控制抽象

执行一个代码块的内容,可以定义一个无参无返回的函数

def runThread(block: () => Unit){

new Thread{

override def run() {block() }

}.start()

}

runThread( () => println("start");Thread.sleep(1000);println("end") )

飘红部分可以省略,增加代码可读性

6、控制抽象与柯里化的结合实例

def until(condition: => Boolean)(block: =>Unit){

if(!condition){

block

until(condition)(block)

}

}

说明:condition: => Boolean等价condition: () => Boolean

block: =>Unit等价 block: () =>Unit

时间: 2024-10-05 03:14:00

scala高阶函数总结的相关文章

scala入门-09 scala高阶函数

我们做spark开发 会使用很多spark的高阶函数 所以 今天我就在linux服务上使用scala高阶函数 声明一个List集合: List集合所在的包已经被预定义自动引入,所以此处就不需要在引入包了,这里直接使用List实例化对象,其实用List的object对象的apply方法 我们使用map函数把list中的每个值都乘以3: x表示l中每一个元素,map对l中的每一个元素进行遍历操作,由于List中只有一种类型的元素,所以我们在执行马屁操作的时候可以省略其类型,如下所示: List集合中

Spark 3000门徒第三课scala高阶函数总结

今晚听了王家林老师3000门徒spark系列课程的第三课,讲述了scala函数,下面写一下心得: 普通函数:def fun1(name:String){println(name)} 函数赋值给变量:val fun1 = functionName _ 匿名函数:val fun2 = (name:String) => prinln(name) 高阶函数:def bigData(func:(String) => Unit, content: String){func(content)} 返回值是函数

第23讲: Scala高阶函数实战详解

高阶函数主要有两种: 一.将一个函数当做另外一个函数的参数(即函数参数) 普通函数的定义语法如下: def funName(para1:Type1,para2:Type2):Type = { do some things } 我们想象一下,如果将函数作为参数,那么函数的类型该怎么写呢? 函数的类型,其实就是输入输出的类型. 假设,我们需要将函数ceil作为参数,而ceil的定义如下   def ceil(x: Double): Double  = java.lang.Math.ceil(x) 那

Scala 高阶函数(high-order function)剖析

Scala 是一种函数式编程语言,也就是说每一个函数都是一个值.Scala 有很简洁的语法用于定义匿名函数.curry 化函数(curried function).应用函数.偏函数以及嵌套函数等.函数式编程由数学函数演变得来,包含大量诸如串联与并联.组合与分离.协变与逆变等一系列概念.本文将就如何实现高阶函数进行阐述,其他部分内容不进行深究. 类型参数化协变与逆协变 类型参数化(type parameterization)由类型协变性(Type variance)补充构成,类型协变性的机制则是在

scala --高阶函数

scala 混合了面向对象和函数式的特征. 在函数式的编程语言中,函数是可以像其他的数据类型一样被传递和操作.这对于想将详细动作传入给算法时变得非常有用. import scala.math._ val fun = ceil _  /从技术上将 _的作用是将ceil方法变成了函数 res = fun(num) / num = 3.14 , res = 4  Array(3.14, 1.42, 2.0).map(fun) / Array(4.0, 2.0, 2.0) map方法接受一个函数参数,

Scala高阶函数

1.作为参数的函数 函数可以作为一个参数传入到一个方法当中去 def main(args: Array[String]): Unit = { val myFunc1 =(x:Int) =>{ x * x } val myArray = Array(1,3,5,7,9).map(myFunc1) println(myArray.mkString(",")) } 2.匿名函数 没有名字的函数即是匿名函数,我们可以通过函数表达式来设置匿名函数 def main(args: Array[

【Scala】高阶函数和柯里化

高阶函数 在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数: - 接受一个或多个函数作为输入 - 输出一个函数 在数学中它们也叫做算子(运算符)或泛函.微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数. 高阶函数的例子 假设有一个函数对给定两个数区间中的所有整数求和: def sumInts(a: Int, b: Int): Int = if(a > b) 0 else a + sumInts(a + 1, b) 如果现在要求连续整数的平方和: def square(x:

scala中的高阶函数

高阶函数 val list =List(1,2,3,4,5,6,7,8) val newList = list.map((x:Int) => 2*x) //map表示映射list中的每一个元素的值为原来的2倍 //newList中的值为 2,4,6,8,10,12,14,16 也可直接写成 val newList = list.map(x => 2*x) 也可等价写成 val newList = list.map(2*_) map函数相当于foreach 集合Set val s = Set(1

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

在函数式编程语言中,你只需要将明细动作包在函数当中作为参数传入即可. 作为值的函数 import scala.math._ class TestFun { val num = 3.14 val fun = ceil _ } 这段代码将num设为3.14,fun设为ceil函数.ceil函数后面的_意味着你确实指的是这个函数,而不是碰巧忘记了给他送参数 Array(3.14, 1.42, 2.0).map(fun) //Array(4.0, 2.0, 2.0) map方法接受一个函数参数,将它应用