scala函数式编程
1.作为值的函数
在Scala中,函数和数字一样,可以在变量中存放函数。可以把函数赋值给一个变量,格式为:val foee=fun _(函数名+空格+_)形式
2.匿名函数
在scala中,不需要给每一个函数命名,而是将该匿名函数赋值给一个变量
例如:Array(3,4,5).map((x:Double)=>3*x)
//Array(9,12,15)
在这里,我们告诉map方法,将每个元素乘以3
匿名函数一般格式:(参数1,参数2,...)=>{函数体(代码块)}
3.带函数参数的函数
实现接受另一个函数作为参数的函数
例如:def value(f: (Double)=>Double)=f(0.25)//这里的参数是任何接受Double并返回Double的函数
然后调用:value(sqrt_)//0.5
spark源码中主要是对集合的处理。由于value是一个接受函数参数的函数,因此它被称为高阶函数。
高阶函数也可以产出另一个函数,例如:
def mulBy(factor: Double)=(x: Double)=>factor*x
val quintuple=mulBy(5)
quintple(20)//100
4.函数返回值也是函数
def func(s:String)=(m:String)=>println(s+":"+m)
func("spark")返回的是一个函数,在函数体中,对于输入参数,只使用一个,则输入参数名可以省略,用_(占位符)替代
例如:val array=Array(1,2,3,4)
array.map(2*_).foreach(println)//2,4,6,8
5.闭包,操作作用域,闭包由代码和代码用到的任何非局限变量定义构成
def mulBy(factor: Double)=(x: Double)=>factor* x
考虑如下调用:
val a=mulBy(3)
val b=mulBy(0.5)
println(a(14)+" "+b(14))//42 7
函数在执行完后,再次执行该函数,函数内部参数仍能被访问
6.柯里化:n个参数的函数,被转换成n个函数
例如:def sum(x:Int,y:Int)=x+y
def sum(x:Int)(y:Int)=x+y
7.SVM转换
在scala中,每当需要告诉另一个函数做某事时,就会传一个函数参数给它。Java并不支持函数,java程序员需要付出更多才能达到相同的效果。其通常做法是将动作放在一个实现某接口的类中,然后将该类的一个实例传递给另一个方法。
为了启用这个语法,需要提供隐式转换。
8.集合式函数编程
scala函数式编程的更多相关文章
- Scala函数式编程进阶
package com.dtspark.scala.basics /** * 函数式编程进阶: * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量: * 2, 函数更长用的方式 ...
- Scala函数式编程——近半年的痛并快乐着
从9月初啃完那本让人痛不欲生却又欲罢不能的<七周七并发模型>,我差不多销声匿迹了整整4个月.这几个月里,除了忙着讨食,便是继续啃另一本"锯著"--<Scala函数 ...
- Scala实战高手****第5课:零基础实战Scala函数式编程及Spark源码解析
Scala函数式编程 ----------------------------------------------------------------------------------------- ...
- 9、scala函数式编程-集合操作
一.集合操作1 1.Scala的集合体系结构 // Scala中的集合体系主要包括:Iterable.Seq.Set.Map.其中Iterable是所有集合trait的根trai.这个结构与Java的 ...
- Scala函数式编程(三) scala集合和函数
前情提要: scala函数式编程(二) scala基础语法介绍 scala函数式编程(二) scala基础语法介绍 前面已经稍微介绍了scala的常用语法以及面向对象的一些简要知识,这次是补充上一章的 ...
- Scala函数式编程(四)函数式的数据结构 上
这次来说说函数式的数据结构是什么样子的,本章会先用一个list来举例子说明,最后给出一个Tree数据结构的练习,放在公众号里面,练习里面给出了基本的结构,但代码是空缺的需要补上,此外还有预留的test ...
- Scala函数式编程(四)函数式的数据结构 下
前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结 ...
- scala 函数式编程之集合操作
Scala的集合体系结构 // Scala中的集合体系主要包括:Iterable.Seq.Set.Map.其中Iterable是所有集合trait的根trai.这个结构与Java的集合体系非常相似. ...
- 大数据笔记(二十五)——Scala函数式编程
===================== Scala函数式编程 ======================== 一.Scala中的函数 (*) 函数是Scala中的头等公民,就和数字一样,可以在变 ...
- Scala函数式编程(五) 函数式的错误处理
前情提要 Scala函数式编程指南(一) 函数式思想介绍 scala函数式编程(二) scala基础语法介绍 Scala函数式编程(三) scala集合和函数 Scala函数式编程(四)函数式的数据结 ...
随机推荐
- .net如何判断网页是否由搜索引擎蜘蛛访问?
判断 this.Request.UserAgent Google的蜘蛛: Googlebot百度的蜘蛛:baiduspiderYahoo的蜘蛛:Yahoo SlurpMSN的蜘蛛:MsnbotAlta ...
- 匿名类型(C# 编程指南)
匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用. 每个属性的类型由编译器推断. 可通过使用 new 运算 ...
- 老陈 ASP.NET封装
第一个页面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- 【BZOJ】【2661】【Beijing WC2012】连连看
网络流/费用流/二分图最大权匹配 拆点费用流求最大权匹配……为什么我拿zyf和Hzwer的代码也交不过去……WA了那么多次……so sad 求路过的神牛指导啊>_<万分感谢 //BZOJ ...
- Matlab实现movieLens转矩阵
for mm=1:num_m %电影编号是mm的训练集行号 ff= find(train_vec(:,2)==mm); %train_vec(ff,1) 行号对应的用户编号 count(train_v ...
- MVC 基础知识
一. MVC架构1.MVC模式是一种严格实现应用程序各部分隔离的架构模式.隔离:分离关注点,松耦合2.模型(Model) 代表着核心的业务逻辑和数据.模型封装了域实体的属性和行为3.视图(View) ...
- 关灯问题 dp
题意是一排路灯,每个路灯有耗电量,照明度,需要给这n个路灯按顺序分组,每组内的最大耗电量是电灯数乘t,可以选择关闭一些电灯,求最大的照明度: 这题思路很明显,预处理出一个g[i][j]表示i到j分为一 ...
- CRC16校验
C++中的代码如下:传入字节(byte)数组引用和数组长度 unsigned short CTcpClient::Crc16(const char *pBuf, unsigned short nLen ...
- 跨站点端口攻击 – XSPA(SSPA)
许多Web应用程序提供的功能将数据从其他Web服务器,由于种种原因.下载XML提要,从远程服务器,Web应用程序可以使用用户指定的URL,获取图像,此功能可能会被滥用,使制作的查询使用易受攻击的Web ...
- wifidog源码分析 - 用户连接过程
引言 之前的文章已经描述wifidog大概的一个工作流程,这里我们具体说说wifidog是怎么把一个新用户重定向到认证服务器中的,它又是怎么对一个已认证的用户实行放行操作的.我们已经知道wifidog ...