Scala 類認識

環境: CentOS 6.3, eclipse
定義類:

我們先看如何定義一個實現‘字節校驗和’類定義代碼:

package scala
import scala.collection.mutable.Map

class ChecksumAccumulator {
  private var sum = 0;
  def add(b: Byte) = sum += b
  def checksum() = ~(sum & 0xFF) + 1
}


如何運行程序:

錯誤方式:

根據Java經驗,加入main 方法,無法運行。

package scala
import scala.collection.mutable.Map

class ChecksumAccumulator {
  private var sum = 0;
  def add(b: Byte) = { sum += b }
  def checksum() = ~(sum & 0xFF) + 1

  def main(args: Array[String]) {
    for (arg <- args) {
      arg.foreach(c => add(c.toByte))
      println(checksum())
    }

  }
}

 

正確方式1:

把程序定義成object。

package scala

object Summer {
  def main(args: Array[String]) {
    val ck = new ChecksumAccumulator()
    for (arg <- args) {
      arg.foreach(c => ck.add(c.toByte))
      println(ck.checksum())
    }
  }
}

正確方式2:

定義一個新的object, 生成ChecksumAccumulator 類對象並使用。

package scala
import scala.collection.mutable.Map

object ChecksumAccumulator {
  private var sum = 0;
  def add(b: Byte) = { sum += b }
  def checksum() = ~(sum & 0xFF) + 1

  def main(args: Array[String]) {
    for (arg <- args) {
      arg.foreach(c => add(c.toByte))
      println(checksum())
    }

  }
}


class 和 object 的區別:

class 定義類,就像對象的模子。object 在scala裏面叫單例對象,不可以通過new 方式生成新的對象,因此object定義的就是個對象。

如果object名字與某個class名字一樣,object 就叫做class的伴生對象,class叫做object的伴生類。因此單例對象可以沒有相對應的伴生類。

 

下一篇將通過例子具體瞭解。

 

 

發佈了40 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章