Scala:函数和闭包
http://blog.csdn.net/pipisorry/article/details/52902271
Scala函数
Scala 有函数和方法,二者在语义上的区别很小。Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
我们可以在任何地方定义函数,甚至可以在函数内定义函数(内嵌函数)。更重要的一点是 Scala 函数名可以由以下特殊字符:+, ++, ~, &,-, -- , \, /, : 等。
函数声明和定义
Scala 函数声明格式如下:
def functionName ([参数列表]) : [return type]
如果你不写等于号和方法主体,那么方法会被隐式声明为"抽象(abstract)",包含它的类型于是也是一个抽象类型。
方法定义由一个def 关键字开始,紧接着是可选的参数列表,一个冒号":" 和方法的返回类型,一个等于号"=",最后是方法的主体。
Scala 函数定义格式如下:
def functionName ([参数列表]) : [return type] = {function bodyreturn [expr] }
以上代码中 return type 可以是任意合法的 Scala 数据类型。参数列表中的参数可以使用逗号分隔。
函数返回值
在scala中,语句块的最后一个值就是这个语句块的值,因此函数并不使用return来返回值,而是简单的把结果放到最后一条语句。
如def getK: Int = k
函数调用
Scala 提供了多种不同的函数调用方式:
以下是调用方法的标准格式:
functionName( 参数列表 )
如果函数使用了实例的对象来调用,我们可以使用类似java的格式 (使用 . 号):
[instance.]functionName( 参数列表 )
Scala通用函数
map
map接受一个处理单个元素的函数,map把这个函数运用在列表的每个元素上放回一个一样长的列表
filter
filter接受一个返回boolean的的值,filter会取出得到true的元素,返回过滤过的列表
foreach
类似于map
mkString
相当于toString,但是需要一个分隔符
zip
zip把两个列表的元素依次结合得到一个元祖集合
reduce
reduceLeft接受一个接受两个参数的函数,reduceLeft会依次把前一次得到的结果和下一个列表元素传递给函数,最后得到一个单个元素
fold
foldLeft和foldRight接受一个需要两个参数的函数,并且依层调用如(1::2::3).foldLeft(1)(_*_)=6
以层次话的方式求值
函数概念解析接案例
函数传名调用(Call-by-Name) | 指定函数参数名 |
函数 - 可变参数 | 递归函数 |
默认参数值 | 高阶函数 |
内嵌函数 | 匿名函数 |
偏应用函数 | 函数柯里化(Function Currying) |
[http://www.runoob.com]
皮皮blog
Scala 闭包
闭包是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
闭包通常来讲可以简单的认为是可以访问一个函数里面局部变量的另外一个函数。
如下面这段匿名的函数:
val multiplier = (i:Int) => i * 10
函数体内有一个变量 i,它作为函数的一个参数。如下面的另一段代码:
val multiplier = (i:Int) => i * factor
在 multiplier 中有两个变量:i 和 factor。其中的一个 i 是函数的形式参数,在 multiplier 函数被调用时,i 被赋予一个新的值。然而,factor不是形式参数,而是自由变量,考虑下面代码:
var factor = 3 val multiplier = (i:Int) => i * factor
这里我们引入一个自由变量 factor,这个变量定义在函数外面。
这样定义的函数变量 multiplier 成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。
from: http://blog.csdn.net/pipisorry/article/details/52902271
ref: [Scala学习笔记之Scala函数及函数式编程 ]
[Scala Tutorial]
Scala:函数和闭包相关推荐
- Scala基础教程(五):函数、闭包
函数是一组一起执行任务的语句.可以将代码放到独立的功能.如何划分你的代码不同功能之间,但在逻辑上,划分通常是让每个函数执行特定的任务. Scala有函数和方法,我们术语说的方法和函数互换用微小的差别. ...
- Scala入门到精通——第五节 函数、高阶函数与闭包
本节主要内容 (一)函数字面量(值函数) (二)匿名函数 (三)函数的简化 (四)函数参数 (四)闭包 函数字面量(值函数) 函数字面量(function literal),也称值函数(functio ...
- scala基础之函数和闭包
一 函数的类型 1.1 不带返回值的类型 def sayHello() { println("hello") } # Unit 和 java的返回值类型void是一样的 d ...
- Scala入门到精通——第五节 函数与闭包
本节主要内容 (一)函数字面量(值函数) (二)匿名函数 (三)函数的简化 (四)函数参数 (四)闭包 函数字面量(值函数) 函数字面量(function literal),也称值函数(functio ...
- Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...
Scala高级特性 1. 学习目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- Spark基础学习笔记13:Scala函数
文章目录 零.本讲学习目标 一.声明函数 (一)显式声明函数 1.声明格式 2.注意事项 3.案例演示 (1)加法函数 (2)阶乘函数 (二)隐式声明函数 1.声明格式 2.注意事项 3.案例演示 ( ...
- 深入理解Java Lambda表达式,匿名函数,闭包
前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...
- Scala 函数篇笔记(二)
文章目录 基础篇 函数和方法的关系 声明方式 参数个数 噩梦篇 至简原则 地狱篇(重要) 函数可以作为对象赋值给变量 函数可以作为参数传递给其他函数 练习: 小问题 函数作为返回值使用 闭包 Q&am ...
- php的匿名函数和闭包函数
php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因 ...
- Scala编程之闭包(closure)
一.概念 闭包:我们把一个函数与其相关引用环境(变量)组合成一个整体叫做闭包 概念晦涩难懂,下面我们用一个例子说明 二.小例子 def minusxy(x:Int) = (y:Int)=>x-y ...
最新文章
- php判断前端传的多个字段与数据库匹配
- CCF青年精英大会(YEF2021)即将召开
- CTF---Web入门第十三题 拐弯抹角
- android 5.0 模拟sd卡,如何使用为Android5.0(Lolliop)提供的新的SD卡访问API?
- leetcode算法刷题记录表
- 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)
- Python 学习之旅1
- Linux群控链接USB手机个数,群控系统能做到同时控制上百台手机吗?教你如何群控手机...
- 六轴传感器icm20602的自检和校准学习
- 【霸指拓客】抖音自动引流脚本源码终端开发
- matlab绘制正弦曲线
- 水逆期自我救赎:MacBook pro进水
- 【HL7】快速入门 HL7 协议
- 常见蓝屏代码解释及解决方法
- stm32串口通信实验
- Adobe国际认证中文官网
- word文档中的水印怎样去除?这三个方法教大家快速搞定!
- 【opencv】二维面找角点/关键点 实现
- 计算机组成原理 光盘中试题答案,白中英计算机组成原理光盘上试题及答案.doc...
- onclick绑定多事件
热门文章
- POJ1039+几何+直线于线段相交
- Leetcode2. Add Two Numbers
- [osg][原创]osg多屏幕显示,会出现透明需要设置的问题
- struts的action属性自动注入原理
- Discuz = 7.2 SQL注入漏洞详情
- 去除迅雷5.9主界面广告
- 用SetCapture捕获鼠标消息
- 【论文阅读】Maxout Networks
- 百倍训练效率提升,微软通用语言表示模型T-ULRv5登顶XTREME
- EMNLP 2020 | RecAdam: 在更少的遗忘下精调预训练语言模型