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.