Lors de l'utilisation de Proc#call pour appeler une fonction lambda en Ruby, self
se retrouve toujours avec la valeur qu'elle avait lorsque la fonction a été définie, plutôt qu'avec la valeur qu'elle a lorsque la fonction est appelée, par exemple :
$p = lambda { self }
class Dummy
def test
$p.call
end
end
d = Dummy.new
> d.test
=> main
Appel test
retours main
alors que je voulais qu'il renvoie #<Dummy:0xf794>
- une instance de Dummy
qui était la valeur de self
à l'endroit du code où j'ai appelé $p
.
En Javascript, je passerais simplement l'objet que je veux appeler en tant que premier argument à call
. Existe-t-il une telle fonctionnalité en Ruby, me permettant de définir un objet arbitraire, ou au moins la valeur actuelle de self
comme nouvelle valeur de self
lorsque j'appelle un Proc
?