Class and Object
class TestClass { val some = 1 }
生成的class文件中会包含一个some()方法,并且这个方法是public的,也就是说类外可以通过类的对象来获取这个some的值
修改:
class TestClass { private val some = 1 }
会生成一个private的some()方法,返回值也是some。但是现在类外是访问不到的
类的方法的参数默认是val类型的
副作用大部分用来修改一个属性的值或者开关一个I/O,只存在副作用的话返回值为Unit,这个时候应该省去:Unit =,用{}把方法体包含起来即可。
如果一个方法是有返回值的,务必不要丢掉=,否则,这个方法的返回值为Unit,因为任何类型都能够被转化成为Unit。
分号语法:
如果算数运算不在一行上面,那么我们应该在每一行的末尾最佳运算符,而不是在每一行的开头追加,因为+a返回的是a,而不是让一个值去加上a。
伴生对象一定要放到同一个文件当中。伴生类和伴生对象之间可以互相访问彼此的私有变量。
伴生对象与伴生类的一个区别是,伴生对象没有构造参数,因为不能实例化一个伴生对象。
Scala程序
Scala程序就是一个object,或许是伴生对象(companion object)亦或是孤立对象(standalone object)。
这个对象中必须要有一个名称为main的,返回值为Unit的,具有合适签名(参数为Array[String])的方法。
如果一个scala文件是以一个定义结束的,而不是一个结果表达式,那么他就是一个object,不然的话就是一个script(脚本)。
无论如何应该了解一下:
scalac 用来编译(interpret).scala文件成.class文件
scala 用来运行程序
- script文件的话,需要带上.scala
- object文件的话,已经被编译了,不需要带上.scala
fsc(fast Scala Compiler) 能够开启一个守护线程,并且分配一个端口号,用来专门编译scala文件,这样第一次比较慢,以后会快很多
fsc -shutdown 用来关掉这个守护线程
scalac的问题在于,每次执行的时候都会启动编译器,且花费时间去扫描所有的jar文件,以及一些其他的准备工作,然后才会去执行编译工作。
Programming In Scala Reading Note 3