私はRubyが初めてで、ユーザークラスにメソッドを追加するという点で、にClass
似たメソッドを作成する方法について混乱:attr_accessor
していますが、これらの追加されたメソッドは事前に初期化されたインスタンス変数にアクセスできます。私が説明するのは難しいので、ここに私の努力の非常に単純化されたサンプルがあります:
class Class
def super_accessor_wow(attr_name)
attr_name = attr_name.to_s
new_var_name = "@crazy_var_name"
instance_variable_set(new_var_name, ["hi", "everyone"])
module_eval(%Q/
def super_#{attr_name}()
return @#{attr_name}
end
def super_#{attr_name}=(value)
@#{attr_name} = value
end
def greetings
return #{new_var_name}
end
/)
end
end
これは、新しいメソッドを使用しClass
て自分のクラスを変更しようとしている方法です。
class Foo
super_accessor_wow(:bar)
end
foo1 = Foo.new()
foo1.super_bar = 1000
puts foo1.super_bar
puts foo1.greetings.inspect
最初に印刷物を置きます'1000'
2番目はprintsを置く'nil'
ため、私のinstance_variable_set
呼び出しはsuper_accessor_wow
一見効果がありません。
ちなみに、2番目のプットが印刷'['hi', 'everyone']'
されると思っていました。このコードはすべて、単一の Ruby ファイルに含まれています。