En Ruby, intento crear una clase, que en función de un valor dado durante la inicialización heredará de uno de los siguientes módulos. Me gustaría crear un módulo base del que hereden ambos módulos que contenga métodos comunes que usan constantes definidas en los módulos que lo heredan. Ejemplo:Heredando constantes dentro de un módulo de Ruby
module BaseMod
def what_am_i
puts OUTPUT
end
end
module Tall
OUTPUT = "I am tall"
include BaseMod
end
module Short
OUTPUT = "I am short"
include BaseMod
end
class Person
def initialize type
if type =~ /short/i
extend Short
else
extend Tall
end
end
end
p = Person.new "short"
p.what_am_i
Mi problema es que cuando "p.what_am_i" se llama me sale el siguiente error:
NameError: uninitialized constant BaseMod::OUTPUT
const_missing at org/jruby/RubyModule.java:2642
what_am_i at test_logic2.rb:3
(root) at test_logic2.rb:28
También me pregunto si hay una mejor manera de ir haciendo esto.
interesante forma de hacer eso. –
@BorisStitnicky dependiendo de lo que desea construir, un método puede tener más sentido que una variable de instancia. YMMV :) – Trevoke