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 ...
随机推荐
- [转]JS中apply和call的联系和区别
JS中有时常用到 apply 和 call 两个方法,搜索网上很多,整理如下,简单看看这两个联系和区别, 联系: 网上查到关于apply和call的定义:这两个方法都能劫持另外一个对象的方法,继承另外 ...
- Parallel Programming-Task Base
Parallel.For/ForEach是数据层面的并行,本文所讲的Task是将不同的操作并行执行,本文主要内容: Task的工作模型 初始化Task 完成Task 取消Task 一.Task工作模型 ...
- Guice总结
Guice总结 Jar包:guice-4.1.0.jar 辅包: guava-15.0.jar aopalliance-.jar javaee-api-6.0-RC2.jar Guice的IoC 两种 ...
- hdu 1724 Ellipse —— 自适应辛普森积分
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1724 函数都给出来了,可以用辛普森积分: 一开始 eps = 1e-8 TLE了,答案只要三位小数,那么 ...
- IAR常用快捷键及技巧
1.复制和粘贴几行的部分代码 需求:有时候我们需要复制几行代码的后半部分,不需要复制前半部分.方法:按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分 [END/2015-09-23] 2.复制一行 ...
- css菜鸟学习之block,inline和inline-block概念和区别
block,inline和inline-block概念和区别 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) ...
- 通信端口Com口被占用的原因分析
目前在调试地磅读取程序,近一段时间无法读取,排查原因发现是com1端口被占用. 从网上找了无数个文章,最终得到一条有价值的消息, 原因如下: com1端口不能读取电子地磅的数据了,重启之后发现 有一个 ...
- 关于导入excel报错的处理(xls,xlsx)
关于导入excel报错的处理(xls,xlsx) 最近在做一个将excel导入到dataGriview中的小功能在做的过程中遇到以下问题: 链接excel的链接串是这样写的 string strCon ...
- Web Pages(单页面模型)
.NET 是一套框架,用来个HTML.JS.CSS和服务器端脚本构建网页和网站. 可以有三种开发模式:Web Pages(单页面模型).MVC(模型视图控制器).Web Forms(事件驱动模型) W ...
- Windchill 查询功能
一.使用SearchCondition 查询语句中用容器中的containerReference.key.id名称来代替数据库中的字段idA3containerReference /** * ...