Scala 3 — 書籍

頂層定義

語言

在 Scala 3 中,所有類型的定義都可以寫在來源程式碼檔案的「頂層」。例如,您可以建立一個名為 MyCoolApp.scala 的檔案,並將以下內容放入其中

import scala.collection.mutable.ArrayBuffer

enum Topping:
  case Cheese, Pepperoni, Mushrooms

import Topping.*
class Pizza:
  val toppings = ArrayBuffer[Topping]()

val p = Pizza()

extension (s: String)
  def capitalizeAllWords = s.split(" ").map(_.capitalize).mkString(" ")

val hwUpper = "hello, world".capitalizeAllWords

type Money = BigDecimal

// more definitions here as desired ...

@main def myApp =
  p.toppings += Cheese
  println("show me the code".capitalizeAllWords)

如所示,不需要將這些定義放入 packageclass 或其他建構中。

取代套件物件

如果您熟悉 Scala 2,這種方法取代了套件物件。但雖然使用起來容易得多,但它們的工作方式類似:當您將定義放入名為 foo 的套件中時,您可以在 foo 下的所有其他套件中存取該定義,例如在此範例中的 foo.bar 套件

package foo {
  def double(i: Int) = i * 2
}

package foo {
  package bar {
    @main def fooBarMain =
      println(s"${double(1)}")   // this works
  }
}

此範例中使用大括弧來強調套件巢狀結構。

這種方法的好處是,您可以將定義放入名為 com.acme.myapp 的套件中,然後可以在 com.acme.myapp.modelcom.acme.myapp.controller 等中參照這些定義。

此頁面的貢獻者