2011-10-24 20 views
3

ルビの囲むモジュールへの参照はどうやって取得できますか?ルビの囲みモジュールへの参照を取得する

module Foo 
    @@variable=1 

    def variable 
     @@variable 
    end 

    class A 
     def somemethod 
     puts "variable=#{Foo.variable}" #<--this won't run, resolving Foo 
             # as the class instead of the module 
     end 
    end 

    class Foo 
     ... # doesn't matter what's here 
    end 
end 

名前の混同によってこの問題が発生しました。名前を修正するのは簡単ですが、私は "正しい"方法はこれをルビーでやっているのだろうと思っています。これを実行しようとすると、Foo.variableをFoo :: Foo.variableとして解決しようとしているようですもちろん、これは失敗した外側のモジュールメソッドを参照する言語で簡単な方法があるはずのように思え

答えて

3

あなたはFoo::接頭辞を追加することにより、外側モジュールの参照を取得することができます。。

::Foo.variable 

あなたのコード例:

module Foo 
    @@variable=1 

    def variable 
     @@variable 
    end 

    class A 
     def somemethod 
     puts "variable=#{::Foo.variable}" 
     end 
    end 

    class Foo 
     ... # doesn't matter what's here 
    end 
end 
+0

ありがとう。私を夢中にする。私はそれをしようとすると –

+0

は私が取得: ' foo.rb:14:'のsomeMethodで ':未定義のメソッド '変数' fooの:31: foo.rbからモジュール(NoMethodError)トライ ' –

+0

"

'にメソッド変数を次のように宣言します: 'def self.variable' – oesgalha

関連する問題