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 等中引用这些定义。

此页面的贡献者