2012-01-01 9 views
7

Si tengo un paquete com.example, puedo crear una clase en la que el paquete de la siguiente manera:¿Hay alguna diferencia sustancial entre declarar una clase normalmente versus en un objeto de paquete?

package com.example { 
    class MyClass 
} 

o como esto:

package com { 
    package object example { 
    class MyClass 
    } 
} 

En ambos casos, la clase resultante es (por lo que otro código de Scala se refiere, al menos) com.example.MyClass.

Sin duda hay diferencias incidentales. En el primer caso, la clase compilada resultante es com/example/MyClass.class, mientras que en el segundo es com/example/package$MyClass.class, pero ¿hay alguna diferencia sustancial?

Respuesta

5

La diferencia en los nombres de archivos de clase generados se discutió en scala-internals, y con suerte desaparecerá en Scala 2.10.

+0

Entonces, para completar, la respuesta a la pregunta "¿hay alguna diferencia sustancial ..." es "no"? ¿Solo diferencias accidentales que desaparecerán en 2.10? ¡Gracias! –

+0

Correcto. (Puede haber más errores al acecho, por supuesto.) El paquete de objetos es una característica que puede evolucionar aún más: consulte la sección "Lo que está por venir" aquí: http://www.scala-lang.org/docu/files/packageobjects/ packageobjects.html – retronym

0

La única razón que se me ocurre es que en lugar de ser capaz de poner sólo class ES, object s o type s en un paquete, puede poner def s, val s y var s en un objeto.

+0

Sí, soy consciente de que ese es el objetivo de un objeto de paquete. Pero esa no es la pregunta que estoy haciendo. La pregunta es, si pongo una clase en un objeto de paquete, eso es diferente en cualquier forma sustantiva de definirlo normalmente. –

Cuestiones relacionadas