In Ruby, sto provando a creare una classe, che in base a un valore fornito durante l'inizializzazione erediterà da uno dei seguenti moduli. Vorrei creare un modulo base ereditato da entrambi questi moduli che contengano metodi comuni che utilizzano costanti definite nei moduli che lo ereditano. Esempio:Inerenti costanti all'interno di un modulo 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
Il mio problema è che quando "p.what_am_i" si chiama ottengo il seguente errore:
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
sto anche chiedendo se c'è un modo migliore per andare a fare questo.
modo interessante di fare quello. –
@BorisStitnicky a seconda di ciò che si desidera creare, un metodo può avere più senso di una variabile di istanza. YMMV :) – Trevoke