2 votes

Comment créer dynamiquement des méthodes avec des paramètres en ruby ?

Comment puis-je créer dynamiquement des méthodes comme celle-ci en utilisant la métaprogrammation ruby ?

class CommentBridge < Bridge

  def id(comment)
    comment.id
  end

  def message(comment)
    comment.message
  end

  def votes_count(comment)
    comment.votes_count
  end

end

J'ai essayé mais ça ne marche pas.

  ['id', 'message', 'votes_count'].each do |method|
    define_method "#{method}" do |parameter|
      method(parameter.method)
    end
  end

3voto

mrzasa Points 1589

Vous devez utiliser public_send pour appeler les méthodes en fonction de leur nom :

  ['id', 'message', 'votes_count'].each do |method|
    define_method "#{method}" do |parameter|
      parameter.public_send(method)
    end
  end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X