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[String]): Unit = {

val hiddenFunc = (x:Int,y:String) => x + y

println(hiddenFunc)

}

3、高阶函数

1、能够接受函数作为参数的方法,叫做高阶函数

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

val func3:(Int,String) =>(String,Int)={

(x,y)=>(y,x)

}

def myMethod3(hello:(Int,String) => (String,Int)):Int ={

val resultFunc = hello(20,"hello")

resultFunc._2

}

println(myMethod3(func3))

}

2、高阶函数同样可以返回一个函数类型

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

def myFunc4(x:Int) = (y:String) => y

println(myFunc4(50))

}

4、参数类型推断

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

val array = Array(1,2,3,4,5,6,7,8,9)

//map当中需要传入一个函数,我们可以直接定义一个函数

array.map((x:Int) => x * 2 )

//进一步化简参数推断省去类型信息

array.map((x) => x * 2 )

//进一步化简单个参数可以省去括号

array.map( x => x * 2 )

//进一步化简如果变量只在=>右边只出现一次,可以用_来代替

array.map( 2 * _ )

}

5、闭包与柯里化

柯里化是scala当中面向函数式编程导致的一种必然的结果,最终推导而来产生的一种现象

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

//柯里化的定义形式

def kery(x:Int)(y:Int):Int={

x + y

}

println(kery(3)(5))

//柯里化的推导过程,注意方法的返回值不要定义任何的返回值类型

val keryResult = (x:Int) => (y:Int) => {x + y}

def keryMethod(x:Int) ={

(y:Int) => x+ y

}

println(keryMethod(20))

println(keryMethod(20)(10))

//注意,方法当中的函数,调用了方法的参数,就叫做闭包

}

再来看一个案例

/**

* 柯里化的应用,比较数组集合当中两个对应下标字符串是否相等

* @param args

*/

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

val a = Array("Hello", "World")

val b = Array("hello", "world")

println(a.corresponds(b)(_.equalsIgnoreCase(_)))

}

Scala高阶函数的更多相关文章

  1. scala高阶函数类型推断什么时候失效?

    class TypeInfer(self: Int, other: Int) { def test(num: Int, word: String, fun1: (Int, Int) => Int ...

  2. Scala高阶函数与泛型

    1. Scala中的函数 在Scala中,函数是“头等公民”,就和数字一样.可以在变量中存放函数,即:将函数作为变量的值(值函数). 2. scala中的匿名函数,即没有函数名称的函数,匿名函数常作为 ...

  3. Scala高阶函数实践

    高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数):另外一种是返回值是函数的函数.package sparkCore/** * Created by zhen on 2018/3 ...

  4. Scala高阶函数示例

    object Closure { def function1(n: Int): Int = { val multiplier = (i: Int, m: Int) => i * m multip ...

  5. Scala中的构造器和高阶函数

    构造器 在定义类时可以定义主构造器.主构造器可以同时声明字段. /** * 主构造器 * @author Administrator */ //在scala中,类和方法交织在一起 class Test ...

  6. Thinking in scala (6)----高阶函数----返回一个函数

    在Thinking in scala (5)----高阶函数* 里面,我们演示了如何把一个函数作为参数传递给另外一个函数. 在本文里面,我们来演示函数式编程另外一个重要的特性:返回一个函数.首先来看这 ...

  7. Thinking in scala (5)----高阶函数*

    高阶函数是函数式编程里面一个非常重要的特色,所谓的高阶函数,就是以其它函数作为参数的函数. 下面以一个小例子演示Scala的高阶函数特性,非常有意思,也非常强大. 首先看这么一个程序: code1: ...

  8. Scala - 快速学习08 - 函数式编程:高阶函数

    函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...

  9. spark快速开发之scala基础之5高阶函数,偏函数,闭包

    高阶函数 高阶函数就是将函数作为参数或者返回值的函数. object function { def main(args: Array[String]): Unit = { println(test(f ...

随机推荐

  1. JSONP数据调用

     json 是一种数据格式  jsonp 是一种数据调用的方式. 什么是JSONP          为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是 ...

  2. 关于service相关知识的认识

    做android的程序开发也有了许久了,当做一个大程序的时候,越来越发现service是非常有用的方法,当你想后台运行数据或者音乐播放操作的时候,都可以才有service,根据实际情况,写成local ...

  3. JS日期、月份的加减

    JS日期.月份的加减 需要注意的是返回的月份是从0开始计算的,也就是说返回的月份要比实际月份少一个月,因此要相应的加上1 // 日期,在原有日期基础上,增加days天数,默认增加1天 function ...

  4. 判断php变量是否定义,是否为空,是否为真的一览表

    分类: 使用 PHP 函数对变量 $x 进行比较 表达式 gettype() empty() is_null() isset() boolean : if($x) $x = ""; ...

  5. Java中URL重写(urlrewrite+Maven)

    一.UrlRewrite的作用   UrlRewrite即地址重写,用户得到的全部都是经过处理后的URL地址.将我们的动态网页地址转化为静态的地址,如html.shtml,还可以隐藏网页的真正路径.此 ...

  6. mysql随机查询符合条件的几条记录

    随机查询,方法可以有很多种.比如,查询出所有记录,然后随机从列表中取n条记录.使用程序便可实现.可是程序实现必须查询出所有符合条件的记录(至少是所有符合条件的记录id),然后再随机取出n个id,查询数 ...

  7. [LeetCode]Maximum Subarray题解

    Maximum Subarray: Find the contiguous subarray within an array (containing at least one number) whic ...

  8. 最大子序列和问题--时间复杂度O(NlogN)

    最大子序列和问题--时间复杂度O(NlogN) package a; /* * 最大子序列和问题,时间复杂度O(NlogN) */ public class Sequence { private st ...

  9. java 通用对象排序

    一个排序类,一个排序util? no.no.no…… 使用反射机制,写了一个通用的对象排序util,欢迎指正. 实体类: package entity; public class BaseTypeEn ...

  10. css的高级选择器,后代选择器,子代选择器,并集选择器,交集选择器

    高级选择器: 后代选择器 子代选择器 并集选择器 交集选择器 一.后代选择器: 使用空格表示后代选择器,父元素的后代(包括儿子,孙子,从孙子) 也就是说,box类下的所有span标签 字体颜色都被设置 ...