2019年9月3日 星期二

Scala 2.x 二 Trait、Object、正則

※Trait

trait 類似 java 的 interface

trait Animal {
  def setName(name: String): Unit
  def getName(): Unit = print("taipei zoo")
}

class Cat extends Animal {
  override def setName(name: String): Unit = {
    println(name)
  }
}

val c = new Cat()
c.setName("tiger")
c.getName()

※也可以直接在 trait 裡實作


※加泛型

trait Add[I1,I2,S] {
  def calc(p1: I1, p2: I2): S
}

class Operator extends Add[Int, Int, Int] {
  override def calc(p1: Int, p2: Int): Int = p1 + p2
}

val op = new Operator()
print(op.calc(9,7))


※多繼承

abstract class A {
  val msg: String
}
class B extends A {
  override val msg = "xxx"
}
trait C1 extends A
trait C2

class D extends B with C1 with C2

※和 java 一樣,extends 還是只能繼承一個,實作可多個,但關鍵字變成 with 了



※Object

類似 java 的 static

object Singleton {
private var count = 0
def instance(): Int = {
  count += 1
  count
}
}

val c1: Int = Singleton.instance()
println(c1) // 1
val c2: Int = Singleton.instance()
println(c2) // 2



※正則


// val regex = "\\d+".r
val regex = new Regex("\\d+")
println(regex.matches("123"))

regex.findFirstMatchIn("123") match {
  case Some(_) => println("good")
  case None => println("bad")
}

※字串加 .r 可以變成正則

沒有留言:

張貼留言