ruby-on-rails - define_method - modules in ruby
En Ruby o Rails, ¿por qué "incluir" a veces dentro de la clase y, a veces fuera de la clase? (1)
pensé
class ApplicationController < ActionController::Base
include Foo
es agregar un "mixin" - para que todos los métodos en el módulo Foo sean tratados como métodos del ApplicationController.
Pero ahora veo código que es
include Bar
class ApplicationController < ActionController::Base
include Foo
Entonces, ¿por qué está fuera de ApplicationController
? ¿En qué se diferencia esto del uso más común de ponerlo dentro de ApplicationController
?
Sí, include Foo
dentro de una clase agrega Foo
a los antepasados de esa clase y, por lo tanto, pone todos los métodos de instancia de Foo
a disposición de las instancias de esa clase.
Fuera de cualquier definición de clase, include Foo
agregará Foo
a los antepasados de Object
. Es decir, es lo mismo que include Foo
dentro de la definición de la clase Object
. El uso de esto es que todos los métodos de instancia de Foo
están ahora disponibles en todas partes.