《Scala 语法要点:变量、Unit、Null/Nothing 与 case class》

《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
阅读 — · 全站 —
🎸 我的歌单 0 首