一、本地函数代码实战

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中本地函数与作为语言一等公民的函数详解相关推荐

  1. C语言中指针与数组的区别,C语言 指针与数组的详解及区别

    C语言 指针与数组的详解及对比 通俗理解数组指针和指针数组 数组指针: eg:int( *arr)[10]; 数组指针通俗理解就是这个数组作为指针,指向某一个变量. 指针数组: eg:int*arr[ ...

  2. 在C语言中实现协程库(一)----------协程切换原理详解

    从这篇文章开始,我将一点一点详细介绍如何在c语言中实现协程库.并对其中涉及到的技术进行详细的解释. 感兴趣的小伙伴欢迎一起参与 代码地址 协程切换原理 使用glibc中<ucontext.h&g ...

  3. 大二c语言期末考试题库及详解答案,大学C语言期末考试练习题(带详解答案)...

    <大学C语言期末考试练习题(带详解答案)>由会员分享,可在线阅读,更多相关<大学C语言期末考试练习题(带详解答案)(55页珍藏版)>请在金锄头文库上搜索. 1.一. 单项选择题 ...

  4. 基于C语言的JPEG编码代码详解

    一.基于C语言的JPEG编码代码详解 #include <stdio.h> #include <stdlib.h> #include <string.h>#prag ...

  5. C语言 字符数组 和 字符串 详解

    C语言 字符数组 和 字符串 详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ...

  6. R语言机器学习之caret包详解(一)

    R语言机器学习caret包trainControl函数详解 R语言机器学习之caret包详解(一) 简介 数据预处理 各种数据变换 近零方差变量 创建虚拟变量 重抽样技术 k折交叉验证 留一交叉验证 ...

  7. php 自动获取头像,PHP_WordPress中用于获取及自定义头像图片的PHP脚本详解,get_avatar()(获取头像) get_avat - phpStudy...

    WordPress中用于获取及自定义头像图片的PHP脚本详解 get_avatar()(获取头像)get_avatar() 函数用来获取置顶邮箱或者用户的头像代码,在评论列表中非常常用. 这个函数提供 ...

  8. C语言 计算选手的名次 详解

    C语言 计算选手的名次 详解 我是JaYLove0589. 本着程序员互相学习的原则, 且因自己深受此题困扰,对递归函数的使用不熟练,所以发下面代码. 望大家指正. 题目描述: 5位选手参加100米决 ...

  9. C语言存储空间布局以及static详解

    本文我将采用Linux环境测试C语言存储空间布局,以及采用VC6.0来测试static的常见用法.采用Linux环境来测试C语言存储空间布局,是因为Linux很容易利用shell命令中的size命令查 ...

最新文章

  1. java for 嵌套_Java中的for循环嵌套
  2. double 直接舍去 保留两位小数
  3. Stanford UFLDL教程 卷积特征提取
  4. 根据方法名执行方法的例子
  5. 生产环境中on yarn模式是否采用yarn session
  6. Delphi TScrollBar 用于滚动窗口、组件内容
  7. 王仲远 | 基于概念知识图谱的短文本理解
  8. cad中填充的剖面线不能被修剪_CAD常用命令:CHAMFER(倒角)
  9. 从fragment启动另一个fragment
  10. split(v1,v2)用于把一个字符串分割成字符串数组
  11. Android Studio配置,加快编译速度
  12. AS中几个较好的插件
  13. DOM操作与引用资源的前后关系
  14. 收集的一些FLASHRIA作品集(附源文件下载)
  15. php本地打开pdf文件_用PHP在web浏览器中打开PDF文件的方法
  16. VS2010使用c++、gSOAP调用WebService 图文教程
  17. 【我爱破解】对某软件的逆向分析与注册机编写
  18. 临床试验数据管理系统
  19. 一份完整的app产品运营推广方案,app推广运营的方法(二
  20. 神经网络中的矩阵运算,神经网络的神经元结构

热门文章

  1. 发票查验API如何实现发票真伪的查验?
  2. jdk,jre下载与配置
  3. 冰点还原精灵中文官网
  4. 每日一句英语:如何回答美国人的How is it going问候语?
  5. 银行数字化转型导师坚鹏:商业银行数字化风控(2天)
  6. 王飞跃|关于 AI for Science问答
  7. 异常02(用try--catch解决和异常结构图)
  8. 2022.6.26 未来的规划
  9. 【C/C++、easyX】一款迷宫类记忆力游戏——《暗夜迷踪》
  10. 小程序 和 uni-app 实现tab点击自动居中屏幕显示