2012-04-01 8 views
4

FooFoo2クラス内にはFUUという定数があり、コードをDRYするにはBaseStuffスーパークラスのメソッドを移動しました。ただ、このような:スーパークラスの初期化されていない定数

class BaseStuff 
    def to_s 
    FUU 
    end 
end 

class Foo < BaseStuff 
    FUU = "ok" 
end 

class Foo2 < BaseStuff 
    FUU = "ok2" 
end 

しかし、私の問題は後に、ということである:

a = Foo.new 
puts a.to_s 

私はこのエラーを取得する:

NameError: uninitialized constant BaseStuff::FUU

は、この問題を修正するためのベストプラクティスはありますか?

答えて

2
class BaseStuff 
    FUU = nil 
    def to_s 
    self.class::FUU 
    end 
end 

class Foo < BaseStuff 
    FUU = "ok" 
end 

class Foo2 < BaseStuff 
    FUU = "ok2" 
end 

a = Foo.new 
puts a.to_s # => ok 

puts Foo2.new.to_s # => ok2 
+0

ちょうど完璧です。ありがとう! – Doug

3
class Foo < BaseStuff 
    ::FUU = "ok" 
end 
+0

うわー、うまくいきます!しかし、これは私の場合には使いにくいかもしれません。なぜなら、この定数を動的に追加するからです。とにかくありがとう。 – Doug