私は以下を定義しています:
#!/usr/bin/env ruby
class Something
def self._attr_accessor key, value, type
(class << self; self; end).send( :attr_accessor, key.to_sym)
instance_variable_set "@#{key}", value
end
end
class Client < Something
_attr_accessor 'foo_bar', 'json', String
end
my_something = Client.new
puts my_something.foo_bar
しかし、次のエラーが表示されます。
/test_inheritance.rb:18:in `<class:Client>': undefined method `foo_bar' for Client:Class (NoMethodError)
from ./test_inheritance.rb:14:in `<main>'
私がやっているメタプログラミングのビットはうまくいきます:
#!/usr/bin/env ruby
class Something
def self._attr_accessor key, value, type
(class << self; self; end).send( :attr_accessor, key.to_sym)
instance_variable_set "@#{key}", value
end
end
class Client < Something
_attr_accessor 'foo_bar', 'json', String
puts self.foo_bar
end
my_something = Client.new
#puts my_something.foo_bar
適切な結果を出力します。しかし、メソッドにパブリックにアクセスできるように _attr_accessor メソッドを定義するにはどうすればよいでしょうか?