我有以下定义:私有方法,继承和元编程?
#!/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>'
metaprograming的一点我做的工作:
#!/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方法以便我可以公开访问它的方法?
这就是我正在寻找的,你有任何示例用例? – rudolph9 2012-04-11 04:03:26
另外,将metod从'format'改为'foobar'当我在类外部调用时遇到和未声明的问题,并且类似于我最初描述的那样,它在类中调用时指示私有方法声明时工作正常。如果你能向我解释为什么该方法被宣布为私人,我将非常感激! – rudolph9 2012-04-11 04:08:08
一个例子就是将'option_accessor:foo'放在一个类中。然后你可以调用MyClass.foo或MyClass.new.foo等,即使通过MyClass.foo ='foo''分配。 – tadman 2012-04-11 15:59:49