Scala超级入门2

102 阅读1分钟

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核心源码解读