【发布时间】:2023-04-10 10:54:01
【问题描述】:
包和对象有什么区别?
【问题讨论】:
标签: scala object package scala-2.8
包和对象有什么区别?
【问题讨论】:
标签: scala object package scala-2.8
包不是运行时实体,对象是。您应该使用包来组织代码的层次结构,并在需要存储代码或数据时使用对象(当然,假设普通的类和实例并不好)。
【讨论】:
给Daniel's answer加一点:
类(第 5.3 节)和对象(第 5.4 节)都是根据模板定义的。
模板定义特征或对象类或单个对象的类型签名、行为和初始状态。它可以有:
- 局部修饰符('
abstract'、'final'、'sealed'、'implicit'、'lazy')- 访问已修改(‘
private’|‘protected’),- 访问限定符('
this')对象定义定义了一个符合模板 t 的新类的单个对象(或:模块)。
它大致相当于以下三个定义,它们加在一起 定义一个类并按需创建该类的单个对象:
final class m$cls extends t
private var m$instance = null
final def m = {
if (m$instance == null) m$instance = new m$cls
m$instance
}
一个对象可以隔离其他Class实例通用的代码。具体用法:
Scala 中的类没有静态成员;但是,可以通过附带的对象定义来实现等效的效果。
一般来说,一个类的伴生模块是一个与该类同名并定义在相同作用域和编译单元中的对象。
反之,该类称为模块的伴生类。
包是编译单元的一部分。
一个编译单元由一系列包装、导入子句和类组成 和对象定义,前面可能有一个包子句。
包是一个特殊的对象,它定义了一组成员类、对象和 包。
与其他对象不同,包不能用作值。拥有与模块或类具有相同完全限定名称的包是非法的。
假设包装外的顶级定义被注入到一个特殊的 空包。该包无法命名,因此无法导入。特殊的预定义名称
_root_指的是最外层的根包 包含所有顶级包。
所以:
【讨论】: