attr_accessor
には魔法が埋め込まれていません。それに渡されたのparamsのそれぞれについて、それは基本的にのようなもの(コードが簡素化され、など必要なチェックを欠いている)を実行する:
def attr_accessor(*vars)
vars.each do |var|
define_method var { instance_variable_get("@#{var}") }
define_method "#{var}=" { |val| instance_variable_set("@#{var}", val) }
end
end
述べ、attr_accessor :var1, :var2
DSLは、単に新しい4つの昔ながらの良いルビー方法をもたらします。あなたが求めているところでは、これらのメソッド(またはそれらのうちのいくつか、またはそれらのどれか)の定義に注意を払うかもしれません。上記のいつものように呼ばれている
attr_reader :variable # reader is reader, no magic
def variable=(val) do
raise ArgumentError, "You must be kidding" if val.nil?
@variable = val
end
:たとえば、1が行う可能性がありますチェックして面倒な設定のため
instance.variable = 42
#⇒ 42
instance.variable = nil
#⇒ ArgumentError: You must be kidding
私はあなたが求めているのか分からないが、私の直感は、あなたがしていることを言いますデリゲートメソッドを探している - http://apidock.com/rails/Module/delegate – marmeladze
何よりも良い? – sawa