2012-04-01 2 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 

하지만 내 문제는, 이후 있다는 것입니다 :이 문제를 해결하는 가장 좋은 방법이 있나요

NameError: uninitialized constant BaseStuff::FUU

:

a = Foo.new 
puts a.to_s 

나는이 오류가?

답변

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

관련 문제