2 votes

True proc d'une méthode

Existe-t-il un moyen d'obtenir une véritable proc à partir d'une méthode en Ruby ?

Un UnboundMethod obtenu par l'intermédiaire de instance_method ne convient pas, car je ne peux la lier qu'à un objet de la classe qui a déclaré la méthode. Je ne peux pas réinterpréter self dans le corps de la méthode comme je le ferais dans une proc (en utilisant instance_exec ).

De même, un Method obtenu par l'intermédiaire de method n'est pas acceptable, car self est lié au récepteur de method et je ne peux pas le changer.

Editer (clarification) :

Ce que j'essaie de faire, c'est de prendre une méthode définie dans une classe et de la transférer dans une autre classe. Cela signifie que je dois être en mesure de réinterpréter la signification de self dans la méthode. Pour les proc Il est possible de le faire par l'intermédiaire de instance_exec y instance_eval mais pas pour les méthodes.

Pourquoi j'essaie de déplacer des méthodes d'une classe à une autre ? Pour faire court, pour mettre en place une forme de namespacing, car je suis très mécontent du contrôle de visibilité fourni par Ruby (il n'y a aucun moyen de cacher un membre d'un module à une classe incluse). Mais cela dépasse largement le cadre de cette question.

4voto

megas Points 10549

Peut-être to_proc de Method peut vous aider :

class A
  def test
    puts 'this is a test'
  end
end

m = A.new.method(:test)

m.to_proc.call #=> this is a test

MISE À JOUR : Juste une idée

En utilisant sourcifier conversion des pierres précieuses proc du premier objet à la source, puis l'évaluer dans le contexte du deuxième objet

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