すべてが質問に記載されています。これらのメソッドは両方とも、コード名を使用してインスタンス変数にアクセス(読み取り/書き込み)できます。
__send__
instance_variable_set
instance_variable_get
誰かが例でそれを説明できますか?
メタプログラミングは、抽象化して探索するときに脳を溶かしてしまうことがあります。
===編集===
脳が再び溶けている場合に後で使用するための例として、回答の履歴書を作成します。
クラス宣言:
class Person
attr_accessor :first_name, :last_name
def initialize(first_name, last_name)
@first_name = first_name
@last_name = last_name
end
def full_name
@first_name + ' ' + @last_name
end
end
初期化:
actor = Person.new('Donald', "Duck")
=> #<Person:0xa245554 @first_name="Donald", @last_name="Duck">
送信(読み取り)の使用法:
actor.send('first_name')
=> "Donald"
actor.send(:first_name)
=> "Donald"
actor.send("last_name")
=> "Duck"
actor.send(:last_name)
=> "Duck"
actor.send('full_name')
=> "Donald Duck"
actor.send(:full_name)
=> "Donald Duck"
instance_variable_getの使用法(読み取り)
actor.instance_variable_get('@first_name')
=> "Donald"
actor.instance_variable_get(:@first_name)
=> "Donald"
actor.instance_variable_get('@last_name')
=> "Duck"
actor.instance_variable_get(:@last_name)
=> "Duck"
送信(書き込み)の使用法:
actor.send('first_name=', 'Daisy')
actor.send('full_name')
=> "Daisy Duck"
actor.send(:first_name=, "Fifi")
actor.send("full_name")
=> "Fifi Duck"
instance_variable_setの使用法(書き込み)
actor.instance_variable_set('@first_name', 'Pluto')
actor.send("full_name")
=> "Pluto Duck"
actor.instance_variable_set(:@last_name, 'Dog')
actor.send(:full_name)
=> "Pluto Dog"
instance_variable_getの誤った使用法(読み取り)
actor.instance_variable_get('full_name')
#NameError: `full_name' is not allowed as an instance variable name
actor.instance_variable_get('last_name')
#NameError: `last_name' is not allowed as an instance variable name
RailsActiveRecordとその関連付けに混乱していました。
答えてくれてありがとう!