2012-06-29 9 views
9
scala> object Test 
defined module Test 

¿Por qué el objeto definido Test llamado 'módulo', no es un objeto complementario, por el intérprete scala?¿Por qué un intérprete de Scala llama a un objeto definido 'módulo'?

¿Hay alguna diferencia entre el módulo y el objeto complementario o es exactamente lo mismo con dos nombres diferentes?

+1

Creo que 'module' era una palabra clave de Scala en algún momento. Se cambió a 'object' para hacer que el lenguaje (sensación) sea más accesible para los desarrolladores convencionales. – missingfaktor

+1

[Esta esencia] (https://gist.github.com/1324982) podría ser de alguna ayuda. – missingfaktor

+0

Gracias por la información adicional. –

Respuesta

9

Técnicamente, hay una sola cosa, en la especificación del lenguaje se llama principalmente 'módulo', pero también se encuentra esta afirmación: "La definición del objeto define un único objeto (o: módulo) ..." (Scala Language Specification)

Por otra parte, sólo se puede hablar de un objeto compañero, cuando en realidad acompaña algo:

"en general, un módulo compañero de una clase es un objeto que tiene el mismo nombre que el clase y se define en el mismo alcance y unidad de compilación. Por el contrario, la clase se llama clase compañera del módulo. " (piense de nuevo: objeto complementario = módulo complementario)

Estar en el estado complementario agrega características a la clase complementaria, a saber, visibilidad (por ejemplo, la clase puede ver los campos privados del módulo complementario). Mismo alcance y unidad de compilación significa que deben definirse en el mismo archivo fuente y el mismo paquete.


Hay un interesting thread on LtU donde se discute objeto de Scala frente terminología módulo. También contiene un enlace a un documento de Odersky y Zenger si está intrigado; mostrando cómo miraron particularmente el sistema de módulos del lenguaje ML (OCaml es una gran influencia en Scala), y cómo lo enmarcan como varios enfoques de composición modular (sugiriendo que el módulo es un concepto más genérico; rasgos como módulos mixin, ...)

+0

sugerencia: los objetos acompañantes con rasgos funcionan igual que con las clases. – ayvango

Cuestiones relacionadas