Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

293
Vistas
¿Hay alguna razón por la cual la anteposición de Ruby se comporte de manera diferente cuando se usa con módulos versus clases?

Mientras parcheamos un módulo de un motor de Rails, descubrimos que si antepone un módulo B a otro módulo A, el módulo B antepuesto no se agregará a los ancestros de las clases que ya incluyeron el módulo A antes de prepend . Para ilustrar:

 module A def a puts 'a' end end class B include A end module C def a puts 'c' end A.prepend self end class D include A end B.new.a # prints: a D.new.a # prints: c B.ancestors #=> [B, A, Object, Kernel, BasicObject] D.ancestors #=> [D, C, A, Object, Kernel, BasicObject]

Ambas clases, B y D , incluyen A , pero solo D toma el nuevo comportamiento, ya que es el que se define después de llamar a prepend .

Por el contrario, aprendimos que la herencia de clases no muestra este comportamiento:

 class A def a puts 'a' end end class B < A end module C def a puts 'c' end A.prepend self end class D < A end B.new.a # prints: c D.new.a # prints: c B.ancestors #=> [B, C, A, Object, Kernel, BasicObject] D.ancestors #=> [D, C, A, Object, Kernel, BasicObject]

Esta vez, ambas clases, B y D , han tomado el nuevo comportamiento, incluso si B se definió antes de llamar a prepend .

¿Hay alguna razón por la cual prepend se comporta de manera diferente cuando se usa con módulos versus clases? Supongo que esto es por diseño, pero presenta un problema cuando se usa prepend con módulos.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

https://bugs.ruby-lang.org/issues/9573 muestra un comportamiento similar en cuanto a clases y módulos. El informe de error se publicó en 2014 y solo se cerró en 2020. Según ese informe, confirmé manualmente que

  • Este comportamiento todavía aparece en Ruby 2.7.2p137 (2020-10-01 revisión 5445e04352) [x86_64-linux], pero
  • Este comportamiento ya no aparece en Ruby 3.0.0p0 (2020-12-25 revisión 95aff21468) [x86_64-linux]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda