当前位置:网站首页>《scala 编程(第3版)》学习笔记
《scala 编程(第3版)》学习笔记
2022-08-08 21:26:00 【Code_LT】
《scala 编程(第3版)》学习笔记
持续更新中…
第2章 入门1
- 函数式编程的核心一,函数是一等的。P9
- 函数式编程的核心二,程序操作应当将输入映射成输出。不要有副作用。副作用是指改变了环境量。P10。原因:函数相互不纠缠,更可靠,更容易复用。P38
- 函数是递归的,必须显示给出函数的结果类型。P25
- 函数字面量: 参数列表=> 函数体,加参数类型时,必须用括号。
(x:Int)=>2*x。 P31。若类型可靠类型推断实现,则可省略括号。a.foreach(x=>x+2)。P147。 - 函数字面量只接收单个参数时,可不写参数。
arr.forecch(println)。P31
第3章 入门2
- new用来创建对象或类的实例。实例可参数化可接收类型和参数:
val a=new 对象名[类型](参数),如 val a=Array[Int](3)。P33 - 通用规则:如果方法只接收一个参数,则调用他它的时候,可不用
.和(),如0 to 2为(0).to(2)。P35 这叫操作符表示法,任何方法都可以是操作符,若有多个参数,则可把多参数写在()里,如a fun (c,d)。P79 - 通用规则:
a(i)实际上是a.apply(i)的简写。i可换成多值。P36 - 通用规则:
a(i)="hello"实际上是a.update(i,"hello")。P36 - 注意区分类的方法和对象的方法。P37
- Array可变,List不可变。
a(1)=2可以,l(1)=2不可以。P38 - List操作:1)拼接
l1_2=l1:::l22)前面添加l2=3::l1,常量时间完成3)追加:l2=l1:+3少用!列表越长追加时间越长。用追加的话可用ListBuffer再转List。P40 - 右操作元:方法名一冒号:结尾,是右操作元,
3::l1//l1.::(3)P39 - Nil可表示空列表,即List(),
l1=1::2::3::Nil等价于’''l1=List(1,2,3)```P40 - List方法:count,init,tail, forall,sort。 P42
- 元组:也不可变,和List不同的是可装不同元素。P42
- 元组一个用处是函数返回多个对象时使用。P42
- 元组用._N取值,原因:t(N)形式时t.apply(),apply要求返回一致的类型,而元组支持不同类型返回。P43
- +=:
a+="1",有的是简写a=a+"1",有的是方法a.+=("1")。P45 - ->:
a -> b 实际上是 a.->(b),返回的是元组(a,b)。scala允许任何对象调用->,通过隐式转换实现。P47 - 用reduce方法来减少var的使用,如
arr.reduceLeft((a,b)=>b)。P53
第4章 类和对象
- private 指明私有字段,只能被类内方法访问。P58
- 不当做断句:1)行末是句点或中缀操作符 (+,-,*等) 2)下一行以不能作为语句开头的词开头 3)行尾在()和[]内。P62
- 单例对象用来实现类似java类的静态成员能力。当有类名和单例对象同名时,单例对象叫伴生对象,类叫伴生类。他们可以相互访问对方私有成员,且必须在同一个源码文件中定义。P63
- 类的实例,无法访问伴生对象中的方法。P63
- 单例对象不接受参数,不能被new实例化,只在代码首次访问时才被初始化。P65
- 没有伴生类的单例对象叫孤立对象,孤立对象一般用于把方法归集到一起或者定义应用程序入口。P65
- 所有应用程序的对象,需要有main函数,且结果输出为Unit。P65
- 脚本需要以计算结果表达式结尾。P66
- fsc来编译非脚本文件。编译后,可直接
scala 类名 参数来调用scala应用程序。P67 - App特质可省略main外壳。直接args使用参数。P68
第5章 基础类型和操作
- Int,Long,Short,Byte整数字面量有两种,0xca(或0Xca十六进制),123(十进制)或123L。P71
- shell总是以十进制打印整数。P71
- 赋值给Short和Byte,只要在合法取值内即可。
val a:Byte=23。P72 - 浮点字面量:十进制数+小数点(+e/E+F/D)如:
12.34e13D。P72 - 字符字面量:‘原字符’或’\uUnicode码’。P73
- Unicode码可出现在scala程序的任何位置,本意时让非ASCII的Unicode字符在源文件中也能用ASCII码表示。
val B\u0041\u0044=1等价于val BAD=1。P74 """|原生字符串“”“.stripMargin有较多坑,不同环境调用的换行符不同(\n或\r\n),导致预期不符。P75- 符号字面量(略)P75
- 布尔字面量
true,false。P76 - 字符串插值。P77
- s:
s" str ${表达式}。 - raw: 和s一样,只不过里面的\不转义。
- f: java.util.Formatter中给出的语法。例
f"${math.Pi}%.5f"。默认为%s。
- s:
- 任何方法都可以是操作符。P79
- 前缀操作符是
unary_操作符的简写,unary(一元的),如-7 为 7.unary_-。仅-、+、!、~可用作前缀操作符。自定义前缀操作符也只能选这四个,如自定义一个unary_!方法。P80 - 后缀操作符是不接受参数,且在调用时不用括号和局点的方法。如
7 toLong。P81 - 约定俗成:如果方法有副作用,则要保留括号。如
println()。如果没有副作用,则可用后缀操作符法表示。如s toLowerCase。P82 &&和||是短路的,&和|是非短路的。P83- 位操作:按位与
&,按位或|,按位异或^,按位取反~P85 - 位移操作:
<<左移,>>右移,>>>无符号右移。<<和>>>自动填充0,>>用左侧最高位填充。P85。 - 相等性:
==,!=可放心用于所有对象,已做好了null值处理,如a == null。P87 - 操作符优先级:为保证程序可读性,建议老实用括号标出优先级。复杂难懂的直接查资料。P89
- 富操作:scala的基础类都可自动隐式转换成富类型,从而获得更多方法。如
0 max 5就是Int类型隐式转换成了scala.runtime.RichInt。P92
第6章 函数式对象
本章主要讨论不可变对象。
- 不可变对象优势P95:
- 容易推理,时不变。
- 自由传递。可变对象则需做保护式拷贝。
- 可做哈希表里的键。
- 劣势P95:
- 不能做局部更新,每次都要完整拷贝。
- 主构造器、辅助构造器与私有构造器
- Scala中,每个类都有主构造器,但并不以this定义。主构造器会执行类定义中的所有语句,即定义时{}中的所有内容。
class YourClass{
...
}
- 辅助构造方法以
def this(...)开始。每个辅助构造器都必须以一个对先前已定义的其他辅助构造器或主构造器的调用开始。P102 require函数的使用。P98- 类的类参数不能直接引用,想要实例引用参数,则要把它们做成字段。P99
scala> class Rational(n:Int,d:Int)
defined class Rational
scala> val a=new Rational(1,2)
a: Rational = Rational@5c669da8
scala> a.n
<console>:14: error: value n is not a member of Rational
a.n
- 自引用。关键字this指向当前执行方法的调用对象。有时this可省略,有时不可省。P100
- 私有化。private字段标识,只能在类定义内部访问,外部是访问不到的(博主注:即通过实例或者类名无法访问)。P103。复习:伴生对象和伴生类可相互访问私有成员。 私有成员不能被继承。
- 定义操作符。
def 操作符,如def +(that: Cls){},定义出来的操作符,任遵守操作符优先级。如a+b*c,还是a+(b*c)。 - Scala的常量一般用首字母大写驼峰命名。
- 方法与函数:Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。
//定义,:,=都不是必须的
def functionName ([参数列表]) [: [return type]] [[=][方法实现]
//例:
ef a: Int={
1+1}
def a={
1+1}//等价
def a{
1+1}//等价
边栏推荐
猜你喜欢

国足1-3不敌越南后,9000人在重温范志毅的“神预言”!

【公开课预告】:AV1编码器的优化及其在流媒体和实时通讯中的应用

ZERO Technology "Chain on the South"——deeply cultivated in the field of digital finance

活动推荐 | 快手StreamLake品牌发布会,8月10日一起见证!

Move your office environment anywhere with a solid state USB drive

The principle of neural network deep learning - 2

力扣每日一题----求第n位斐波那契数

关于RecyclerView布局

Zero Digital Reports Digital Financial Innovation to the Secretary of Hainan Provincial Party Committee

Conformer论文以及代码解析(上)
随机推荐
活动推荐 | 快手StreamLake品牌发布会,8月10日一起见证!
微信小程序小说云开发免费源码
js写一个淘宝大小图轮播
如何寻找竞争情报发挥企业优势
MATLAB综合实例:时域信号的频谱分析
Contextual Transformer Networks for Visual Recognition论文以及代码解析
金山WPS支持xlookup了?亲自上手实战好不好用。
并发场景下的死锁原因及规避解决方法
Redis之集群部署、哨兵集群
js中with作用
oracle数据库的数据备份导出与数据导入恢复
Zero Digital Reports Digital Financial Innovation to the Secretary of Hainan Provincial Party Committee
Move your office environment anywhere with a solid state USB drive
CrossFormer:A Versatile Vision Transformer Based on Cross-Scale Transformer论文以及代码解析
中国石油大学(北京)-《钻井液工艺原理》第三阶段在线作业
Conformer论文以及代码解析(下)
回调、递归、闭包、构造函数
ZERO Technology "Chain on the South"——deeply cultivated in the field of digital finance
第七章 类与对象
Oxylabs Webinar: Web Scraping Solutions in Action