《Scala 语法要点:变量、Unit、Null/Nothing 与 case class》
收集了 Scala 入门常用语法要点,配以交互式 REPL 示例加深理解。
1. 引入包中所有成员
import java.awt._ // 引入包内所有成员
2. Unit 类型
Unit 表示无值,等同其他语言中的 void,用作不返回任何结果的方法的结果类型。Unit 只有一个实例值,写成 ()。
3. Null 与 Nothing 的区别
Null:null或空引用。Null是所有 AnyRef 类型的子类型。Nothing:位于 Scala 类层级的最底端,是任何其他类型的子类型。
4. var 与 val
var:声明变量,可重新赋值。val:声明常量,初始化后不可再赋值(推荐)。
5. case class
声明为 case class 后,Scala 会自动创建伴生对象并实现一系列方法,好处如下:
5.1 自动实现 apply —— 无需 new 即可创建对象
scala> case class People(name:String, age:Int)
defined class People
scala> val p = People("mobin",22) // 省略 new
p: People = People(mobin,22)
5.2 自动实现 unapply —— 可模式匹配获取属性
scala> p match { case People(x,y) => println(x,y) }
(mobin,22)
5.3 构造参数默认 val,带 getter;若声明为 var 则同时提供 setter
// 参数为 val(默认),只读
scala> p.name
res0: String = mobin
// 赋值会报错:reassignment to val
// 参数为 var,可修改
scala> case class People(var name:String)
scala> val p = People("mobin")
scala> p.name = "mobin2" // 修改成功
5.4 默认实现 toString / equals / copy / hashCode
val p2 = p.copy(name = "tom")
6. object 与 class 的区别
class:普通类,需要实例化。object:单例对象。定义在 top-level,同一个 object 在 JVM 中只有一个实例;作为「伴生对象」时与 class 共享私有成员。
7. 无参数函数的括号约定
- 有括号的函数调用时可加括号也可不加括号。
- 不带括号的函数调用时一定不能加括号。
约定:无副作用的函数省略括号;有副作用的函数保留括号(提醒调用者需小心)。
参考
- case class 详解:https://www.cnblogs.com/MOBIN/p/5299951.html
阅读 —
·
全站 —