2010-08-19 5 views
1

Possible en double:
How do I use define_method to create class methods?Les méthodes de classe dynamique sont-elles possibles dans Ruby?

Je suis en train de le faire:

class Foo 
    class << self 
    def runtime_method(*methods) 
     methods.each do |name| 
     define_method "self.#{name}" do |*args| 
      "dynamic class method #{name.inspect}" 
     end 
     self.class_eval do 
      define_method name do 
      "dynamic instance method #{name.inspect}" 
      end 
     end 
     end 
    end 
    end 

    runtime_method :foo, :bar 
end 

puts Foo.foo rescue #=> otherwise, undefined method `foo' for Foo:Class (NoMethodError) 
puts Foo.new.foo #=> dynamic instance method: :foo 
puts Foo.new.bar #=> dynamic instance method: :bar 

Est-il possible de définir des méthodes de classe dynamique en rubis?

Répondre

3

Je ne suis pas sûr de vous avoir compris, mais c'est ce que vous voulez dire?

>> class Foo 
>> end 
=> nil 
>> Foo.blah 
NoMethodError: undefined method `blah' for Foo:Class 
    from (irb):3 
>> 
?> Foo.class.class_eval do 
?> def blah 
>>  puts "hello" 
>> end 
>> end 
=> nil 
>> Foo.blah 
hello 
=> nil 
+0

bien! c'est ce que je veux dire :) –

+0

Cela définit bla sur _every_ class. – philomory

Questions connexes