ここについての6つのオプションがあります。どちらを使用するかは、お客様のニーズによって異なります。再割り当てすることができ、クラス全体で単一の値 -
class MyClass
def initialize
@opts = ...
end
def my_method
puts @opts[:thing]
end
end
クラスインスタンス変数:
class MyClass
@opts = ...
class << self
attr_accessor :opts
end
def my_method
puts self.class.opts[:thing]
end
end
クラス変数 -
インスタンス変数各MyClassのインスタンスは、独自のオプションを取得します - 各MyClass とすべてのサブクラスはsaを共有します私値(便利な構文が、めったに良いアイデア):
class MyClass
@@opts = ...
def my_method
puts @@opts[:thing]
end
end
クラス定数 - 変異したが、再割り当てられていないことも、単一のオブジェクト。簡単にMyClass::OPTS
を経由して他の人からアクセスでき、このクラスからアクセス:
class MyClass
OPTS = ...
def my_method
puts OPTS[:thing]
end
end
グローバル変数 - あなただけの全体のアプリでこれらのいずれかを持つことができます。多くの場合、グローバル変数は無分別ですが、スタンドアロンアプリケーションのオプションについては、おそらく適切な:
$opts = ...
class MyClass
def my_method
puts $opts[:thing]
end
end
グローバル定数 - 新しい値に設定することはできませんが、突然変異させることができる、多くのクラスからアクセス:
OPTS = ...
class MyClass
def my_method
puts OPTS[:thing]
end
end
FYI:@@は、クラスのグローバルを意味するものではなく、継承階層のグローバルを意味します。したがって、Foo