Scala学习笔记

1.在Scala中,变量或函数的类型总是写在变量或函数的名称的后面。
 
2.Scala并不区分基本类型和引用类型
 
3.定义常量用val,定义变量用var
 
  通过val声明的只会生成getter,而var会生成setter,getter
 
4.java中的++ i和i ++在Scala里不起作用
 
5.参数化:在创建实例的同时就完成对它的“设置”
 
6.a*b:左操作数是方法的调用者,可以写成a.*(b)
 
  但1:: twoThree,:: 方法的调用者是twoThree,1是方法的传入参数,可以写成twoThree.::(1)
 
(以 ':' 结尾的方法由它的右操作数调用,并传入左操作数,以其他字符结尾的反之.)
 
7.方法体前面没有等号,但带有花括号,那么方法的结果类型必定是Unit,
 
   如果方法最后返回的是String,但结果类型被声明为Unit,那么String将被转变为Unit并丢弃原值。所以为了避免出现错误,方法最好带上等号
 
8.类和单例对象间的差别是。单例对象不带参数,而类可以,因为单例对象不是用new关键字实例化的,所以没机会传递给它实例化参数,单例对象在第一次访问的时候才会被初始化
 
9.任何方法都可以是操作符,到底是操作符还是方法取决于你如何使用它,如果写成s.indexOf('o'),indexOf就不是操作符,但是如果写成s indexOf 'o',那么indexOf就是操作符,因为你以操作符标注方式使用它。
 
10父类中成员声明为var的字体,则子类用val重写是错误的,因为var提供了setter/getter方法,而val只提供getter方法
 
11.Scala里的每个辅助构造器的第一个动作都是调用同类的别的构造器
 
12.本地函数可以访问包含其函数有参数。
 
13.让函数字面量更简短的方式:去类型参数和省略括号,下划线当作一个或多个占位符
 
14.在scala中,访问字段比调用方法略快,因为字段值在类初始化时候被预算,而方法调用在每次调用的时候都要计算,但是使用字段需要额外的内存空间。
 
15.可以在调用不带参数的方法时省略空的括号
 
16.Scala里的字段和方法属于相同的命名空间,所以可以使用字段来重写无参数方法,所以,Scala禁止在同一个类里用同样的名称定义字段和方法
不同于Java(4个命名空间),Scala只有两个命名空间,值(字段,方法,包还有单例对象),类型(类和特质名)
 
17.content mkstring "\n":将content数组格式化为字符串,其中每个数组元素占据一行
 
18.Any是所有其他类的超类,Nothing是所有其他类的子类
 
19.声明函数时使用return语句,必须声明返回的类型如: def a() : Int = {return }
 
20.若类中声明无参方法时没有带括号,那么在调用时也不能带括号 
 
21.如果指针右侧只出现一次参数就可使用_
如:    def f(x => x * 3)       
等价于 def  f(_ * 3)
 
22.泛型的类型匹配要注意List[String],Map[char,Int]不能被匹配,因为匹配是发生在编译进,List的泛型会被擦除掉,导致只要是List的就能匹配成功,但Array[Int]能匹配成功

你可能感兴趣的:(Scala学习笔记)