ボクココ

個人開発に関するテックブログ

オレオレ attr_accessor

なんとなーく クラスマクロを理解したので、その代表格であるattr_accessor を自分で実装してみた。


1 class MyClass
2 p self # -> MyClass
3 def self.my_accessor name
4 p self #-> MyClass
5 define_method "#{name}=" do |v|
6 p self #-> #
7 @name = v
8 end
9 define_method "#{name}" do
10 @name
11 end
12 end
13
14 def test
15 p self #-> #
16 end
17 my_accessor :mine
18 end
19
20 my = MyClass.new
21 my.mine = "hoge"
22 p my.mine

  • > "hoge"

このself 大事だね!selfがクラスなのか、オブジェクトなのかを意識しておかないとバグが間違いなく発生するw
今回はdefine_methodで self, を使ってないからオブジェクトのインスタンスメソッドになってうまく動作してくれる。
うんうん。我ながら初めてメタプログラミングをやった気持ちになれた。 楽しいぞ