什么时候我应该使用包和Scala中的对象?

时间:2010-05-09 00:24:25

标签: scala object package scala-2.8

包和对象有什么区别?

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:4)

Daniel's answer添加一点:

来自Scala specifications

物件

  

类(第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
}

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

  

Scala中的类没有静态成员;但是,伴随物体的定义可以达到同等效果   通常,类的伴随模块对象,它与类具有相同的名称,并在同一范围和编译单元中定义
  相反,该类称为模块的伴侣类


软件包

包是编译单元的一部分。

  

编译单元由一系列包装,导入子句和类组成   和对象定义,可以在package子句之前。

     

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

     

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

     

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


所以:

  • 对象组织要从唯一的运行时实例执行的代码。
  • package为编译步骤声明代码名称空间。