20.Scala中本地函数与作为语言一等公民的函数详解
一、本地函数代码实战
package ce.scala.ppimport scala.io.Sourceobject FunctionOps_20 {def main(args: Array[String]): Unit = {val width = args(0).toIntfor(arg <- args.drop(1)) //F:\liliprocessData(arg, width)}//对于模块封装,强内聚弱耦合是至关重要的。而内部函数就可以实现这个要求def processData(filename : String , width : Int){def processLine(line : String){ //内部函数(本地函数) if(line.length > width) //内部函数可以访问外部函数传入的参数widthprintln(filename + " : " + line)}var source = Source.fromFile(filename)for(line <- source.getLines)processLine(line)}
}
F:\lili.txt文件里有三句话:
I feel
I am into Music so much!!!
SS
输出:
F:\lili.txt : I feel
F:\lili.txt : I am into Music so much!!!
二、作为一等公民的函数代码实战
var increase = (x : Int) => x + 1 //匿名函数,把这个函数作为值赋值给变量increaseprintln(increase(10)) //输出11increase = (x : Int) => x +9999 //这个变量increase又可以被赋值为其他函数 val someNumbers = List(-11, -10, -5, 0, 5, 10)
val someNumbers = List(-11, -10, -5, 0, 5, 10)someNumbers.foreach { (x : Int) => print(x+ " ") } //输出-11 -10 -5 0 5 10 printlnsomeNumbers.filter( (x : Int) => x > 0 ).foreach{ (x : Int) => print(x+ " ")} //输出 5 10 printlnsomeNumbers.filter { (x) => x >0 }.foreach{(x : Int) => print(x+ " ")} //输出 5 10 可以省略掉参数类型IntprintlnsomeNumbers.filter { x => x >0 }.foreach{(x : Int) => print(x+ " ")} //输出 5 10 对于只有一个参数的函数,可以省略掉参数外围的括号()printlnsomeNumbers.filter { _ >0 }.foreach{(x : Int) => print(x+ " ")} //输出 5 10 如果参数x在=>右侧只出现一次,则可以用下划线_替换掉printlnval f = (_:Int) + (_:Int) //匿名函数println(f(3,8)) //输出: 11
请仔细看每个filter里的变化。x的类型Int可以去掉 ==> x括号可以去掉 ==> 若只有一个参数,可以用下划线_代替
参考资料来源于 DT大数据梦工厂Scala零基础实战经典第20课 由王家林老师讲解
20.Scala中本地函数与作为语言一等公民的函数详解相关推荐
- C语言中指针与数组的区别,C语言 指针与数组的详解及区别
C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...
- 在C语言中实现协程库(一)----------协程切换原理详解
从这篇文章开始,我将一点一点详细介绍如何在c语言中实现协程库.并对其中涉及到的技术进行详细的解释. 感兴趣的小伙伴欢迎一起参与 代码地址 协程切换原理 使用glibc中<ucontext.h&g ...
- 大二c语言期末考试题库及详解答案,大学C语言期末考试练习题(带详解答案)...
<大学C语言期末考试练习题(带详解答案)>由会员分享,可在线阅读,更多相关<大学C语言期末考试练习题(带详解答案)(55页珍藏版)>请在金锄头文库上搜索. 1.一. 单项选择题 ...
- 基于C语言的JPEG编码代码详解
一.基于C语言的JPEG编码代码详解 #include <stdio.h> #include <stdlib.h> #include <string.h>#prag ...
- C语言 字符数组 和 字符串 详解
C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...
- R语言机器学习之caret包详解(一)
R语言机器学习caret包trainControl函数详解 R语言机器学习之caret包详解(一) 简介 数据预处理 各种数据变换 近零方差变量 创建虚拟变量 重抽样技术 k折交叉验证 留一交叉验证 ...
- php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像)
get_avat - phpStudy...
WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...
- C语言 计算选手的名次 详解
C语言 计算选手的名次 详解 我是JaYLove0589. 本着程序员互相学习的原则, 且因自己深受此题困扰,对递归函数的使用不熟练,所以发下面代码. 望大家指正. 题目描述: 5位选手参加100米决 ...
- C语言存储空间布局以及static详解
本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法.采用Linux环境来测试C语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查 ...
最新文章
- java for 嵌套_Java中的for循环嵌套
- double 直接舍去 保留两位小数
- Stanford UFLDL教程 卷积特征提取
- 根据方法名执行方法的例子
- 生产环境中on yarn模式是否采用yarn session
- Delphi TScrollBar 用于滚动窗口、组件内容
- 王仲远 | 基于概念知识图谱的短文本理解
- cad中填充的剖面线不能被修剪_CAD常用命令:CHAMFER(倒角)
- 从fragment启动另一个fragment
- split(v1,v2)用于把一个字符串分割成字符串数组
- Android Studio配置,加快编译速度
- AS中几个较好的插件
- DOM操作与引用资源的前后关系
- 收集的一些FLASHRIA作品集(附源文件下载)
- php本地打开pdf文件_用PHP在web浏览器中打开PDF文件的方法
- VS2010使用c++、gSOAP调用WebService 图文教程
- 【我爱破解】对某软件的逆向分析与注册机编写
- 临床试验数据管理系统
- 一份完整的app产品运营推广方案,app推广运营的方法(二
- 神经网络中的矩阵运算,神经网络的神经元结构