ここで 2 つのメソッドには 1 つの問題があります... インスタンス変数が 1 つのインスタンスに設定されている場合、そのアクセサーはすべてのインスタンスで使用可能になりますself.class
。
dude = Mine.new
dude.my_number 1
puts dude.my_1
dudette = Mine.new
dudette.my_1 = 2 # works, but probably shouldn't
dudette.my_number 2
dude.my_2 = 3 # works, but probably shouldn't
おそらくやりたいことは、インスタンス変数を持つインスタンスのみを変更することです:
class Mine
# ...
def my_number num
class << self
attr_accessor "my_#{num}"
end
self.send("my_#{num}=", num)
end
end
このように、インスタンス変数は、作成されたオブジェクトのアクセサーのみを取得します。アクセサーを設定している場合は、それを再利用する方が読みやすいと思うので、instance_variable_setも気にしませんでした。しかし、それはスタイルコールです。ここで重要なのは、class << self
の代わりに呼び出すことですself.class
。