1 votes

Obtenir le sujet d'une liaison en Ruby 1.8.6

En Ruby 1.8.7, je peux faire ce qui suit afin d'obtenir le sujet d'un objet de liaison :

binding.eval("self")

Cependant, dans Ruby 1.8.6, la méthode eval est privée, donc je l'expose comme ceci :

class Binding
  public :eval
end

Ce qui semble toutefois fonctionner correctement, binding.eval("self") renvoie la liaison elle-même, et non le sujet de la liaison.

Comment obtenir le sujet d'une liaison en Ruby 1.8.6 ? La solution n'a pas besoin d'être jolie - elle doit juste fonctionner jusqu'à ce que nous puissions passer à la version 1.8.7.

1voto

Wayne Conrad Points 31052

Je parierai au moins cinq cents eval('self', abinding) fonctionnera :

#!/usr/bin/ruby1.8

class Foo

  def foo
    binding
  end

end

p eval('self', Foo.new.foo)    # => #<Foo:0xb7bfe5ac>

Cela fonctionne car si vous passez une liaison à eval, celui-ci évalue la chaîne dans le contexte de cette liaison. self dans le contexte de la liaison est ce que self était lorsque la liaison a été créée.

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