我有以下定義:私有方法,繼承和元編程?
#!/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