ブログ書くのが遅れました、忘れちゃいけない系なので残します。
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")
- とやると未定義のインスタンス変数を定義できます。