在 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)
如所示,无需将这些定义放在 package
、class
或其他结构中。
替换包对象
如果你熟悉 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.model、com.acme.myapp.controller 等中引用这些定义。
此页面的贡献者
内容
- 简介
- Scala 特性
- 为什么选择 Scala 3?
- Scala 初体验
- Hello, World!
- REPL
- 变量和数据类型
- 控制结构
- 领域建模
- 方法
- 一等函数
- 单例对象
- 集合
- 上下文抽象
- 顶级定义
- 总结
- 初识类型
- 字符串插值
- 控制结构
- 领域建模
- 工具
- OOP 建模
- FP 建模
- 方法
- 方法特性
- Scala 3 中的主方法
- 总结
- 函数
- 匿名函数
- 函数变量
- Eta 展开
- 高阶函数
- 编写自己的 map 方法
- 创建返回函数的方法
- 总结
- 打包和导入
- Scala 集合
- 集合类型
- 集合方法
- 总结
- 函数式编程
- 什么是函数式编程?
- 不可变值
- 纯函数
- 函数即值
- 函数式错误处理
- 总结
- 类型和类型系统
- 推断类型
- 泛型
- 交集类型
- 并集类型
- 代数数据类型
- 协变
- 不透明类型
- 结构类型
- 依赖函数类型
- 其他类型
- 上下文抽象
- 扩展方法
- 上下文参数
- 上下文界限
- Given 导入
- 类型类
- 多重相等
- 隐式转换
- 总结
- 并发
- Scala 工具
- 使用 sbt 构建和测试 Scala 项目
- 工作表
- 与 Java 交互
- 面向 Java 开发人员的 Scala
- 面向 JavaScript 开发人员的 Scala
- 面向 Python 开发人员的 Scala
- 下一步