Diferencia entre extend e include (extend vs include)
La diferencia entre extend e include puede ser confusa a veces, por eso voy a intentar aclarar, como creo yo que es. Pero primero echemos un vistazo al rdoc
Obj.extend Mod.include



A jugar...
Vamos a poner este código de ejemplo:
module A def a puts "Has llamado a A#a" end end module B def b puts "Has llamado a B#b" end end class C include A extend B end
La diferencia es que los métodos del módulo A son para la instancia y los métodos del módulo B son para la clase por lo que sería lo mismo que hacer:
class D include A class << self include B end end
Esta técnica es muy usada en frameworks como merb. Cuando un objeto es incluido, se llama a:
include InstanceMethods extend ClassMethods
Este es uno de los usos más típicos que he visto de include vs extend
Otras diferencias que me vienen a la mente son:
- extend es un método público, mientras que include no.
-
Si se llama a una a extend de una instancia, es lo mismo que si la abrieses e incluyeses el módulo.
o = Object.new o.extend A class << o include B end o.a #=> Has llamado a A#a o.b #=> Has llamado a B#b
Y hasta donde yo se... no tiene mucho más misterio
<>30, dic | 4 comentarios cientifico compártelo Tags: classmethods, class, instancemethods, instance, include, extend, ruby

4 comentarios
Ahora sí que me ha quedado claro. Muuuuchas gracias!
Muy guapo, a mí también me ha quedado claro (por fin!!!)
Gracias!
no entendi una teeta
Lo unico que puedo decir al respecto es: La ejecución de un INCLUDE es OBLIGATORIA, la ejecución de un EXTEND es OPCIONAL (puede que se ejecute, como puede que no se ejecute).
Ahora el codigo no se...hay si....:(
Escribe un comentario