跳轉到內容

Scala/物件

來自華夏公益教科書,開放的書籍,開放的世界

在 Scala 中,物件是一個帶有名稱的例項,具有欄位和方法等成員。物件和類具有相同的名稱並在同一個原始檔中定義,被稱為伴生物件。伴生物件具有特殊的訪問控制屬性,這在Scala/訪問修飾符中介紹。

一個簡單的物件示例

object SimpleObject
val a = SimpleObject

在第一行中,關鍵字“object”用於定義一個新物件,後面跟著物件的名稱,這裡為“SimpleObject”。在第二行中,一個名為“a”的值被賦值為名為“SimpleObject”的物件例項。

物件的成員類似於類的成員。有關更多資訊,請參見Scala/類#成員。物件中成員的示例

object MembersObject {
  val someValue = "test"
  def someMethod(a:Int) = a*a
}
println("someValue is: " + MembersObject.someValue) //Prints "someValue is: test".
println("someMethod(3) gives: " + MembersObject.someMethod(3)) //Prints "someMethod(3) gives: 9".

物件還支援特殊的“apply”方法,有關更多資訊,請參見Scala/類#Apply

物件的一種用途是包含獨立於任何環境的欄位和方法。一個例子是“math”,它是標準庫中的一個物件,它包含幾個僅依賴於傳遞給它們的任何引數(如果有)的欄位和方法。

println("Value of pi: " + math.Pi) //Prints "Value of pi: 3.141592653589793"
println("Square root of 4: " + math.sqrt(4)) //Prints "Square root of 4: 2.0"
println("Square root of 5: " + math.sqrt(5)) //Prints "Square root of 5: 2.23606797749979"

物件的另一個用途是建立類的例項

class Rectangle(val a:Int, val b:Int)
object Rectangle {
  def createValidRectangle(a:Int, b:Int) = new Rectangle(math.max(a, 1), math.max(b, 1))
}
val validRectangle = Rectangle.createValidRectangle(3, -10000)
println("Valid rectangle: " + validRectangle.a + ", " + validRectangle.b) //Prints "Valid rectangle: 3, 1".

在上面,仍然可以透過直接使用“Rectangle”類的建構函式來建立無效的矩形。Scala/可見性描述瞭如何限制對建構函式的訪問,這與物件結合使用,使得更容易確保和驗證只建立某些給定類的有效類例項。

物件的第三個用途是建立 Scala 程式的入口點。這是透過定義一個具有特定簽名的“main”方法來完成的

object ProgramEntryPoint {
  def main(args:Array[String]) = {
    println("Program execution start.")

    println("Program execution end.")
  }
}

行“def main(args:Array[String])”指示了入口點有效的必需簽名。有關更多資訊,請參見Scala/設定#編譯 Scala

華夏公益教科書