第九章 控制抽象
来源:互联网 发布:什么是审计作业软件 编辑:程序博客网 时间:2024/05/17 09:36
在上一章中学习了函数值的概念,本章将要学习如何将函数值应用到创建新的控制抽象。
简化代码
- 所有的函数都可以分为通用部分和非通用部分
- 通用部分是函数体
- 非通用部分必须由参数提供
- 我们将这样的函数称为高阶函数,这使得我们有机会去组织和简化代码
- 所有的函数都可以分为通用部分和非通用部分
def containsNeg(nums: List[Int]):Boolean = { var exists = false; for(num <- nums) if(num < 0) exists = ture; exists; }
如果我们在这里使用高阶函数exists:
def containsNeg(nums: List[Int]):Boolean = nums.exists(_ < 0);
就是如此的简洁!
柯里化
柯里化的函数被应用于多个参数列表,而不仅仅一个
def curriendSum(x: Int, y: Int) = { x + y;}
可以写作:
def curriendSum(x: Int)(y: Int) = { x + y;}
还可以写作:
def curriendSum(x: Int) = { (y: Int) => x + y;}
编写新的控制抽象
- 对于多个参数,先做柯里化
- 在传入一个参数时,可以用花括号代替小括号达到更像控制抽象的效果
def twice(x: Double, op: Double => Double) = op(op(x));
改写:
def twice(x: Double)(op: Double => Double) = op(op(x));
调用
twice(5) { _ + 1; }
这样看起来就更加像是内建的控制抽象了。
传名参数
- 要实现传名参数,要定义参数的类型开始与 => 而不是 ()=>
- 需要将 ()=> 转换成 =>
- 括号内的表达式不会先于调用函数被评估,而是创建一个函数值,其apply方法将其评估,而这个函数值则会传递给调用函数
0 0
- 第九章 控制抽象
- Programming In Scala笔记-第九章、控制抽象
- 第九章 抽象类 & 接口
- 第九章 多态和抽象
- 第九章多态抽象
- 第九章:网际控制报文协议(ICMP)
- 第九章 控制单元的功能
- 控制抽象
- java 第九章 抽象类、接口和包 笔记
- 第九章 接口和抽象类 基本使用
- 第九章 接口和抽象类 接口详解
- 《tiny6410裸机程序》第九章:tiny6410按键控制蜂鸣器程序
- C++编程思想读书笔记之 第九章 命名控制
- 数据库系统实现_第九章 并发控制
- 第九章 tcp拥塞控制--基于Linux3.10
- JAVA编程思想学习 — 第九章 (违例差错控制)
- git版本控制管理系列-----第九章 合并
- 第九部分 程序流控制---------------
- 使用JavaMail接收邮件的示例
- 自定义滑动到底部自动加载SwipeRefreshLayout
- 解析OBJ模型并将其加载到Unity3D场景中
- maven导出项目依赖的jar包
- ORACLE用JDBC操作CLOB
- 第九章 控制抽象
- iOS开发者遇到审核失败的原因及解决办法
- ie6,ie7常见兼容性问题总结
- js日期时间选择器bootstrap
- Unity3D游戏开发之C++插件接入
- 程序员的10大职业谏言
- hdu5567解题报告/#63 (div.2) 1001
- 在ubuntu上软件安装的几种格式dev,rpm,bin,tar.gz
- JSP基本指令