2011-12-26 5 views
2

私はRubyの可変スコープがどのように機能するかを100%確信していません。require "path.rb"ステートメントの使用に問題があります。どのようにして現在のスコープに「必要」するのですか?

ファイルa.rb:

a = { 
     :hey => "ho" 
    } 

require "path/to/b.rb" # => true 

ファイルb.rb:ここでは、問題を引き起こしているコードスニペットです

b = "harhar" 
a[:test] = b 

a.rbの範囲は、モジュール内にある::クラス、私が試してみると、aの変数b.rbにアクセスしようとすると、aという変数が現在のスコープにないというエラーが表示されます。

私は、含まれているファイルが自分のスコープ内にあるので、衝突しないように読んでいます。もしそうなら、これを回避するためのコンベンションは何ですか?

答えて

3

トップレベルのローカル変数は、ファイルに対してローカルです。ローカル変数を使用する代わりに、インスタンス変数、モジュール変数、メソッド、定数、またはグローバルを使用してください。これらはすべて、プログラム内のどこからでも見ることができます。 (使用したいものは、手元の特定のケースに依存します。データを格納するそれぞれの方法は、他のものよりも意味をなさない場合があります)。

+0

メソッドを使用する場合は、これも機能しますか?クラスA :: B :: Cのコンテキストでは「x.rb」が含まれ、「C」には「hello」というメソッドがあります.x.rbから「hello」を呼び出すにはどうすればよいですか? – tarnfeld

+1

@tarnfeld:メソッドをモジュールに配置します。グローバルにも利用可能にしたい場合は、グローバルスコープに含めることができます。 – Chuck

関連する問題