En Ruby, supongamos que tengo una clase Foo
que me permite catalogar mi gran colección de Foos. Es una ley fundamental de la naturaleza que todos los Foos son verdes y esférica, por lo que se han definido métodos de clase de la siguiente manera:Delegando métodos de instancia al método de clase
class Foo
def self.colour
"green"
end
def self.is_spherical?
true
end
end
Esto me permite hacer
Foo.colour # "green"
pero no
my_foo = Foo.new
my_foo.colour # Error!
a pesar del hecho de que my_foo
es completamente verde.
Obviamente, podría definir un método de instancia colour
que llame a self.class.colour
, pero eso se vuelve difícil si tengo muchas de esas características fundamentales.
También puedo presumiblemente hacerlo definiendo method_missing
para probar la clase por cualquier método que falte, pero no estoy seguro si esto es algo que debería estar haciendo o un hack feo, o cómo hacerlo de manera segura (especialmente cuando en realidad estoy bajo ActiveRecord in Rails, que entiendo hace algunas cosas divertidas de Clever con method_missing).
¿Qué recomendarías?
Sin querer debatir sobre el colo (u) del bikeshed, puede ser una buena idea usar el código inglés en lugar del inglés Commonwealth. –
Este es mi código personal; las únicas personas que probablemente lo vean son yo y algunos amigos también de Gran Bretaña. Utilizaré American en el código de lugar de trabajo si el estilo de la casa lo exige: no voy a usarlo en mi propio sitio. – Chowlett
@Chowlett, esa es definitivamente su elección. Pero aún los mezclará, p. cuando accede a su '@ colour' en un método' initialize'. – ecoologic