やっぱりこれアカン
・・・Componentクラスの続き。
各インスタンスでコンポーネントを持ち、エンジン側ではシングルトンでアクセス・・・って考えていたけど、
やっぱり無理があるため、「シングルトンはデフォルトのコンポーネント管理、インスタンスではシーン独自のコンポーネント管理」で、
エンジンに引き渡すと。嗚呼、こっちのほうが自然だ。
というわけで、デフォルトのコンポーネント群をアクセスする「Components.default/default=」メソッドを追加して、
分かりやすいアクセサにしようと。
というわけで、出来たのがこんな感じ。
# encoding: UTF-8 # attrメソッドはクラス変数アクセスでも可能か? class A METHODS = [:hoge, :fuga] METHODS2 = [:default] class << self attr_accessor *METHODS attr_reader *METHODS2 end @default = self attr_accessor *METHODS def to_default METHODS.each{|name| A.__send__(name.to_s+"=", self.__send__(name)) } end end a = A.new a.hoge = 15 a.fuga = 20 a.to_default a.hoge = 30 a.fuga = 40 puts A.hoge # => 15 puts A.fuga # => 20 x = A.default puts x.hoge # => 15 puts x.fuga # => 20 puts a.hoge # => 30 puts a.fuga # => 40