必要なファイルで定義されたローカル変数にアクセスできないことは事実ですが、定数にアクセスでき、両方のコンテキストでアクセスできるオブジェクトに格納されているすべてのものにアクセスできます。したがって、目標に応じて、情報を共有する方法がいくつかあります。
最も一般的な解決策は、おそらくモジュールを定義し、そこに共有価値を置くことです。モジュールは定数であるため、必要なコンテキストでモジュールにアクセスできます。
# in welcome.rb
module Messages
WELCOME = "hi there"
end
# in irb
puts Messages::WELCOME # prints out "hi there"
値をクラス内に配置して、ほぼ同じ効果を得ることができます。または、ファイル内の定数として定義することもできます。デフォルトのコンテキストは、mainと呼ばれるクラスObjectのオブジェクトであるため、mainでメソッド、インスタンス変数、またはクラス変数を定義することもできます。これらのアプローチはすべて、「グローバル変数」を作成するための本質的に異なる方法であり、多かれ少なかれ、ほとんどの目的に最適ではない可能性があります。一方、スコープが非常に明確に定義されている小さなプロジェクトの場合は、問題ない場合があります。
# in welcome.rb
WELCOME = "hi constant"
@welcome = "hi instance var"
@@welcome = "hi class var"
def welcome
"hi method"
end
# in irb
# These all print out what you would expect.
puts WELCOME
puts @welcome
puts @@welcome
puts welcome