8

包和对象有什么区别?

4

2 回答 2

11

包不是运行时实体,对象是。您应该使用包来组织代码的层次结构,并在需要存储代码或数据时使用对象(当然,假设普通的类和实例并不好)。

于 2010-05-09T01:48:49.390 回答
4

丹尼尔的回答添加一点:

Scala 规范

对象

类(§5.3)和对象(§5.4)都是根据模板定义的。
模板定义特征或对象类或单个对象的类型签名、行为和初始状态。

它可以有:

  • 局部修饰符('<code>abstract', '<code>final', '<code>sealed', '<code>implicit', '<code>lazy')
  • 访问修改('<code>private' | '<code>protected'),
  • 访问限定符('<code>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
}

一个对象可以隔离其他类实例通用的代码。具体用法:

Scala 中的类没有静态成员;但是,可以通过附带的对象定义来实现等效的效果。
通常,类的伴生模块是与类同名并定义在相同作用域和编译单元中的对象
相反,该类称为模块的伴生类


套餐

包是编译单元的一部分。

一个编译单元由一系列包装、导入子句以及类和对象定义组成,它们前面可能有一个包子句。

包是一个特殊的对象,它定义了一组成员类、对象和包。

与其他对象不同,包不能用作值。拥有与模块或类具有相同完全限定名称的包是非法的。
假设包装外的顶级定义被注入到一个特殊的空包中。该包无法命名,因此无法导入。

特殊的预定义名称_root_是指包含所有顶级包的最外层根包。


所以:

  • 对象组织要从唯一的运行时实例执行的代码。
  • package 为编译步骤声明代码命名空间。
于 2010-05-09T00:55:38.287 回答