Any类
相当于Java里的Object类,即所有类的父类
模式匹配 match
类似与switch case的语法,但是Scala支持的匹配更加丰富,不止数值和字符串的比较。
def describe(x: Any) = x match {
case 1 => "one"
case false => "False"
case "hi" => "hello, world!"
case Nil => "the empty list"
case e: IOException => "this is an IOException"
case s: String if s.length > 10 => "a long string"
case _ => "something else"
}
Option对象
Java上也有类似的类:Optional。不论是 Scala 中的 Option,还是 Java 中的 Optional,都是用来帮助我们更好地规避 NullPointerException 异常的。
Option 表示一个容器对象,里面可能装了值,也可能没有装任何值。由于是容器,因此一般都是这样的写法:Option[Any]。
scala> val keywords = Map("scala" -> "option", "java" -> "optional") // 创建一个Map对象
keywords: scala.collection.immutable.Map[String,String] = Map(scala -> option, java -> optional)
scala> keywords.get("java") // 获取key值为java的value值。由于值存在故返回Some(optional)
res24: Option[String] = Some(optional)
scala> keywords.get("C") // 获取key值为C的value值。由于不存在故返回None
res23: Option[String] = None
Option也可以和模式匹配一起用。
def display(game: Option[String]) = game match {
case Some(s) => s
case None => "unknown"
}
scala> display(Some("Heroes 3"))
res26: String = Heroes 3
scala> display(Some("StarCraft"))
res27: String = StarCraft
scala> display(None)
res28: String = unknown
这是我在极客时间的2月第3天打卡。 参考文章 Kafka核心源码解读