ruby metaprogramming - получение имен методов и информации о параметрах для класса - PullRequest
3 голосов
/ 08 октября 2010

Я хочу получить методы класса в объекте. Пожалуйста, смотрите следующий пример У меня есть класс "user.rb"

class User
  def say_name

  end

  def walk(p1)

  end

  def run(p1, p2)

  end
end

и я написал следующий код

require 'user.rb'

a = User.new

arr = a.public_methods(all = false)

Выше кода вернет имя метода, но мой вопрос: я хочу получить имя метода с параметрами

def def run(p1, p2)

end

Я хочу получить имя метода ("run") и имена его параметров (p1, p2) или количество параметров (2)

может кто-нибудь мне помочь, заранее спасибо

ура

Sameera

Ответы [ 3 ]

5 голосов
/ 08 октября 2010
User.new.method(:run).arity   # => 2
1 голос
/ 10 октября 2010

если вы хотите параметры, то http://github.com/rdp/arguments ваш друг

0 голосов
/ 24 августа 2017

Вы хотите:

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

req означает, что это обязательное поле.Другие значения, которые вы можете получить:

  • 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]]
...