2010-10-08 5 views
3

Je souhaite obtenir des méthodes de classe dans un objet. S'il vous plaît voir l'exemple suivant J'ai une classe « user.rb »métaprogrammation ruby ​​- obtention des noms de méthodes et des informations de paramètres pour une classe

class User 
    def say_name 

    end 

    def walk(p1) 

    end 

    def run(p1, p2) 

    end 
end 

et j'ai écrit le code suivant

require 'user.rb' 

a = User.new 

arr = a.public_methods(all = false) 

code ci-dessus retourne le nom de la méthode, mais ma question est que je veux obtenir le nom de la méthode avec des paramètres

def def run(p1, p2) 

end 

Je veux obtenir le nom de la méthode (« run ») et ses noms de paramètres (p1, p2) ou le nombre de paramètres (2)

quelqu'un peut me aider, merci à l'avance

acclamations

Sameera

Répondre

5
User.new.method(:run).arity # => 2 
+0

grâce Gishu, fonctionne comme un charme: D – sameera207

+9

ou, si vous ne voulez pas créer une instance: 'User.instance_method (: run) .arity # => 2' – horseyguy

0

Vous voulez:

User.new.method(:run).parameters # => [[:req, :p1], [:req, :p2]] 

req signifie que c'est un champ obligatoire. D'autres valeurs que vous pourriez obtenir sont:

  • def run(p1 = nil) =>[[:opt, :p1]]
  • def run(*p1) =>[[:rest, :p1]]
  • def run(&p1) =>[[:block, :p1]]
  • def run(p1:) =>[[:key, :p1]]
  • def run(p1: nil) =>[[:keyopt, :p1]]
  • def run(**p1) = >[[:keyrest, :p1]]
Questions connexes