今度はクラスメソッドを生成するメソッド
ポイントはdefine_methodの実行コンテキストをメタクラスにすること
1 #!/usr/bin/env ruby
2 # encoding: utf-8
3 class Creature
4 def self.atta(arg)
5 metaclass = class << self
6 self
7 end
8 metaclass.class_eval do
9 define_method(arg) do |val|
10 eval("@#{arg}=#{val}")
11 end
12 end
13 end
14 atta :life
15 end
16
17 class Dragon < Creature
18 life 100 # => 100
19 @life # => 100
20 end
21 Dragon.singleton_methods # => ["life", "atta"]
22
No comments:
Post a Comment