Deveroper メモ

記事内容に絶対の保証はなく..どちらかというと自分用のノウハウ蓄積ページ。 それでも良ければ見ていってください。

instance_variable.... #guruby

ブログ書くのが遅れました、忘れちゃいけない系なので残します。

  • ruby で外側からインスタンス変数にアクセスするには、以下のものがあると思います。
attr_reader
attr_writer
attr_accessor
  • 前回の guruby 前までは、この3つしかないと思っていました。
  • しかし、下記のやり方でも外側からインスタンス変数にアクセスする事が出来ます(というか、教わりました)
class Hoge
  def initialize()
    @fuga = nil
  end
end

hoge = Hoge.new()
p hoge.instance_variable_get(:@fuga) #=> nil
hoge.instance_variable_set(:@fuga, "メタプログラミング Ruby")
p hoge.instance_variable_get(:@fuga) #=> メタプログラミング Ruby
hoge.instance_eval("@fuga = 'fuga'")
p hoge.instance_variable_get(:@fuga) #=> fuga
  • なんと、読み込みだけじゃなく、書き込みが出来る!?
  • 特に instance_eval は色々出来てしまいそうで怖い。
  • 自分は使う事はないかも?しれないけど、この辺覚えておいて損はなさそうです。

....

  • すみません。追記です。
  • @korogaru さんが思い出させてくれました。(感謝!)
hoge.instance_variable_set(:@hoge, "hogehoge")