Chapter11
package scala import scala.collection.mutable /**
* Created by EX-CHENZECHAO001 on 2018-04-03.
*/
class Chapter11 { }
object Chapter11 { // 标识符由字母、数字或运算符构成
// 一元和二元操作符其实是方法调用
// 操作符优先级取决于第一个字符,而结合性取决于最后一个字符
// apply和update方法在对expr(args)表达式求值时被调用
// 提取器从输入中提取元组或值的序列 // 11.1 标识符
// 变量、函数、类等的名称统称为标识符
// 可以在反引号中包含几乎任何字符序列
val `val` = 42 // 11.2 中置操作符
1 to 10
1.to(10) // 等同
1 -> 10
1.->(10) // 等同 // 11.3 一元操作符
// 中置操作符是二元的,它们有两个参数。只有一个参数的操作符称为一元操作符。如果参数在后,则为后置操作符
1 toString()
1.toString() // 等同
// + - ! ~ 可以作为前置(prefix)操作符,出现在参数之前。它们被转换成对名为unary_操作符的方法调用
-1
1.unary_- // 等同 // 11.4 赋值操作符
// 赋值操作符的名称形式为操作符=
var a = 0
var b = 1
a -= b
a = a - b // 等同
// <= >= != 不是赋值操作符
// 以=开头的操作符不是赋值操作符(== === =/=等)
// 如果a有一个名为操作符=的方法,那么该方法会被直接调用 // 11.5 优先级
// 除赋值操作符外,优先级由操作符的首字符决定
// 后置操作符的优先级低于中置操作符 // 11.6 结合性
// 操作符的结合性决定了它们是从左到右求值还是从右到左求值。
// 在Scala中所有操作符都是左结合的,除了
// 1.以冒号结尾的操作符
// 2.赋值操作符
// 3. 用户于构造列表的::操作符是右结合的,1 :: 2 :: Nil 等同 1 :: (2 :: Nil) // 2 :: Nil 等同 Nil.::(2) // 11.7 apply和update方法
val scores = new mutable.HashMap[String, Int]()
scores("Bob") = 100 // 调用 scores.upldate("Bob", 100)
val bobsScore = scores("Bob") // 调用scores.apply("Bob") class Fraction1107(n: Int, d: Int){ }
object Fraction1107 {
def apply(n: Int, d: Int) = new Fraction1107(n,d)
}
// 因为有apply方法,可以直接用Fraction1107(3,4)构造对象,而不用 new Fraction1107(3,4) // 11.8 提取器
// 提取器就是一个带unapply方法的对象
// 可以把unapply方法当做是伴生对象中apply方法的反向操作
// apply方法接受构造参数,然后将它们变成对象
// unapply方法接受一个对象,然后从中提取值,这些值就是当初用来构造对象的值
class Fraction(val num: Int, val den: String){
}
object Fraction {
def unapply(input: Fraction): Unit = {
if(input.den == 0) {
None
}else{
Some((input.num, input.den))
}
}
}
// 从字符串中提取名字和姓氏
class Name(val first: String, val last: String) { }
object Name {
def unapply(input: String) = {
val words = input.split("\\s+")
if(words.length != 2) {
None
}else{
Some((words(0)),(words(1)))
}
}
}
val author = "Cay Horstmann"
val Name(first, last) = author
// 每个样例类都自动具备apply和unapply方法 // 11.9 带单个参数或无参数的提取器
// 在Scala中没有只带一个组件的无组。如果upapply方法要提取单值,则应该返回一个目标类型的Option
object Number {
def unapply(input: String): Option[Int] = {
try{
Some(Integer.parseInt(input.trim))
} catch {
case ex: NumberFormatException => None
}
}
}
val Number(n) = "1729" // 测试输入,返回Boolean
object IsCompound {
def unapply(input: String) = input.contains(" ")
}
// author match {
// case Name(first, last @ IsCompound) => println("isCompound")
// } // 11.10 unapplySeq方法
// 要提取任意长度的值的序列,需用unapplySeq,返回一个Options[Seq[A]] ,其中A是被提取的值的类型
object Name1110 {
def unapplySeq(input: String): Option[Seq[String]] = {
if(input.trim == ""){
None
} else {
Some(input.trim.split("\\s+"))
}
}
}
author match {
case Name(first, last) => println("2")
} }
Chapter11的更多相关文章
- 【APUE】Chapter11 Threads
看完了APUE第三版的Chapter11 Threads,跟着书上的demo走了一遍,并且参考了这个blog(http://www.cnblogs.com/chuyuhuashi/p/4447817. ...
- JavaWeb chapter11 编写无脚本的JSP页面
1. JSP表达式语言EL 使用jsp:getProperty的property属性只能访问Bean的属性,不能访问嵌套的属性. JSP EL(表达式语言 Expression Language), ...
- Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志
11.5 日志记录 可以通过Loger.getGlobal().info(xxxx);的方式来记录log. 11.5.2 高级日志 1)通过一个包名来 创建一个新的日志记录器. private sta ...
- Chapter11:关联容器
当用decltype来获得一个函数指针类型时,必须加上一个*来指出我们要使用一个给定函数类型的指针.decltype<CompareIsbn>*. map<string, int&g ...
- 《es6标准入门》chapter11中关于Proxy的一个错误例子的纠正
在原书第二版的p120,这里有一个使用Proxy实现管道化调用的例子,想法很好,但是代码有问题,下面是更正之后的代码. 由于我是在node环境下运行,所以我把几个全局函数定义到global内了,如果是 ...
- 《鸟哥的Linux私房菜》Chapter11 20180726~20180806
目录 1.认识Bash这个shell 1.1.硬件.核心与shell 1.2.系统的合法shell和/etc/shells功能 1.3.Bash shell的功能 1.3.1.命令修编功能 1.3.2 ...
- Chapter11(关联容器)--C++Prime笔记
1.关联容器: map关键字-值对,经常被称为关联数组 set中每个元素只有一个关键字,即只保存关键字的容器 ①允许重复的关键字的容器名字都包含multi. ②不保持关键字顺序存储的容器的名字都以但粗 ...
- [SharePoint][SharePoint Designer 入门经典]Chapter11 工作流基础
1.SPS中可以创建的工作流的种类 2.SPD工作流基础 3.创建列表\库工作流 4.创建可重用的工作流 5.利用基于站点的工作流 6.SPD 工作流的限制和注意事项
- Matlab 从入门到精通 Chapter11 文件读取I/O
11.1 工作空间数据读取 将工作空间的变量保存为文件,可以使用save命令. save('filename') 将文件保存在当前目录下,文件名为filename.mat save('filenam ...
随机推荐
- bzoj 3653: 谈笑风生 可持久化线段树
题目大意 在一棵单位边权的有根树上支持询问: 给定a,k求满足下列条件的有序三元对的个数. a,b,c互不相同 a,b均为c的祖先 a,b树上距离<=k 题解 solution 1 首先我们知道 ...
- unity渲染层级关系小结
http://blog.csdn.net/meegomeego/article/details/42060389 最近连续遇到了几个绘制图像之间相互遮挡关系不正确的问题,网上查找的信息比较凌乱,所以这 ...
- 用WinDbg分析Debug Diagnostic Tool生成的Userdump文件
1.下载WinDbg(Debugging Tools for Windows):http://www.microsoft.com/whdc/devtools/debugging/default.msp ...
- UOJ #348 州区划分 —— 状压DP+子集卷积
题目:http://uoj.ac/problem/348 一开始可以 3^n 子集DP,枚举一种状态的最后一个集合是什么来转移: 设 \( f[s] \) 表示 \( s \) 集合内的点都划分好了, ...
- yum配置文件位置
centos的yum配置文件 cat /etc/yum.conf cachedir=/var/cache/yum //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/ ...
- NSSet 用法
//集合NSSet //集合也是储存对象,和字典一样也是无序存储 //集合中里面的元素不能重复 //集合里面的元素可以随机取出 //用数组放到集合中 NSArray *a10 = @[p1 , p2 ...
- HDOJ1114(完全背包)
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const ...
- Java访问子类对象的实例变量
对于Java这种语言来说,一般来说,子类可以调用父类中的非private变量,但在一些特殊情况下, Java语言可以通过父类调用子类的变量 具体的还是请按下面的例子吧! package com.yon ...
- spring 学习 requestMapping
1: @RequestMapping:处理请求地址映射的请求,有6个属性? ` value: URL 地址 method: GET/POST/PUT/DELETE co ...
- altium designer 中的top/bottom solder和top/bottom paste mask
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51751936 1.top solder为助焊层,说白一点就是说,有这个层的地方就没 ...