En Ruby, ¿hay alguna diferencia entre escribir class Foo::Bar
y module Foo; class Bar
para el espacio de nombres? ¿Entonces qué?Usando "::" en lugar de "módulo ..." para el espacio de nombres de Ruby
Respuesta
Si utiliza class Foo::Bar
, pero el módulo Foo
no se ha definido todavía, una excepción serán levantados, mientras que el método module Foo; class Bar
definirá Foo
si no se ha definido todavía.
Además, con el formato de bloque, se podría definir múltiples clases dentro:
module Foo
class Bar; end
class Baz; end
end
Observe también esta curiosa poco de Rubí-ismness:
FOO = 123
module Foo
FOO = 555
end
module Foo
class Bar
def baz
puts FOO
end
end
end
class Foo::Bar
def glorf
puts FOO
end
end
puts Foo::Bar.new.baz # -> 555
puts Foo::Bar.new.glorf # -> 123
¿Puedes darnos alguna explicación de por qué está sucediendo esto en tu ejemplo? Creo que la segunda llamada también devolvería 555. – wmock
@WillsonMock Buena pregunta. Casi me gustaría abrir una nueva pregunta SO para esto. Encontré la respuesta cuando escribí esto, pero ahora ya no la recuerdo y no puedo encontrarla nuevamente. Debería haber publicado en la respuesta aquí también: -/Pasa con las clases también por cierto. no solo módulos – Casper
genial, en caso de que quiera seguir, esta es la nueva pregunta de SO que he publicado: http://stackoverflow.com/questions/15119724/ruby-lexical-scope-vs-inheritance – wmock
- 1. ¿Cómo acceder al espacio de nombres base en Ruby?
- 2. Espacio de nombres de módulo de TypeScript en varios archivos
- 3. ¿Cómo obtener todos los nombres de clase en un espacio de nombres en Ruby?
- 4. Manejando modelos de espacio de nombres (clases) en el espacio de nombres
- 5. ¿Por qué Magento intenta llamar al espacio de nombres de Mage en lugar de a mi espacio de nombres personalizado?
- 6. Tirando pitón módulo hacia arriba en espacio de nombres paquete
- 7. Acrónimo de espacio de nombres corto en ruby
- 8. ¿La mejor práctica para funciones de espacio de nombres en Ruby? (Pregunta novato)
- 9. Espacio de nombres para [DataContract]
- 10. arquetipo Maven no usando propiedades para crear nombres de módulo
- 11. Espacio de nombres de etiqueta raíz XSLT en lugar del espacio de nombres de atributo de elemento
- 12. F # 2.0 advertencia de espacio de nombres
- 13. Módulo de escritura para Ruby
- 14. ¿Cómo incluyo un módulo en una clase de espacio de nombres?
- 15. Resolviendo un espacio de nombres usando el teclado
- 16. ¿Está usando el espacio de nombres ... como malo?
- 17. :: sin espacio de nombres
- 18. En Python, ¿cómo puedo acceder al espacio de nombres del módulo principal desde un módulo importado?
- 19. El tipo o espacio de nombres 'LINQ' no existe en el espacio de nombres 'System.Data', etc
- 20. ¿Es posible crear un alias para un módulo en Ruby?
- 21. usando el espacio de nombres solo para la lista de inicializadores
- 22. ¿Está 'usando el espacio de nombres' dentro de otro espacio de nombre equivalente a un alias?
- 23. En python, ¿cómo importa todas las clases desde otro módulo sin mantener el espacio de nombres del módulo importado?
- 24. espacio de nombres 'SharePoint' no existe en el espacio de nombres 'Microsoft'
- 25. principal en el espacio de nombres
- 26. Ruby - Convención de nomenclatura - ¿mayúscula para acrónimos en los nombres de clase/módulo?
- 27. espacio de nombres, argparse, y el uso
- 28. Constante de espacio de nombres en C#
- 29. ¿Para qué se usa el espacio de nombres en C++?
- 30. usando Interop.SHDocVw.dll ¿Dónde puedo encontrar este espacio de nombres/dll?
También si 'foo' se definió como una la clase 'Foo :: Bar' no generará la excepción mientras' módulo Foo; end' levantará un 'TypeError' ya que' Foo' no es un módulo sino una clase. – robertodecurnex