2016-12-22 5 views
0

私は自分のレールアプリケーションで定数を定義するクラスを持っています。たとえば:Ruby:定数への参照がある場合、長いネストされたモジュールは避けてください

module A 
module B 
    class C 
    CONSTANT = "constant" 
    end 
end 
end 

そして、別のモジュールでは、私はこれは一定の取得したい:

module Test 
    class Main 
    def get_constant 
     const = A::B::C::CONSTANT 
    end 
    end 
end 

は、これが長すぎると冗長です。私はプレフィックスA::B::Cを使用しないためにいくつかの方法を試しました。

module Test 
    class Main 
    include A::B 
    def get_constant 
     const = C::CONSTANT 
    end 
    end 
end 

しかし、すべての場合、私のレールアプリはこの定数を見つけることができないため、いつもエラーに遭遇します。

+0

あなたはデフget_constant '使用することができます。 C :: CONSTANT; end – Thanh

答えて

1

は、第二のクラス/モジュールで、あなたは最初から定数への参照を作成する方法を教えてください:

class One 
    OneConst = 1 
end 

class Two 
    TwoConst = One::OneConst 
    def self.two_const 
    TwoConst 
    end 
    def two_const 
    TwoConst 
    end 
end 

puts Two.two_const 
puts Two.new.two_const 
+0

私はあなたの最初の解決策を適用することができます。 'TwoConst = One :: OneConst'というスコープを別の変数に入れないことを意味します。 2番目の例では、私は適用できません:1.モジュールを拡張する必要があります(ただし、変数は内部クラスです)。 2.私がモジュールを拡張する場合、私は 'C :: Constant'を使ってこの定数への参照を試みます。私はエラーに遭遇します:定数 'C :: Constant'を定義解除します –

+0

あなたは正しいです、2番目はうまくいきませんでした。それは奇妙だ、私はそれが初めてだったと思った。 –

関連する問題