10.12. Ewaluacja kodu we wcześniejszym kontekście

Problem

Stworzyliśmy metodę dokonującą ewaluacji łańcucha zawierającego kod w języku Ruby. Niestety, metoda ta funkcjonuje niezgodnie z oczekiwaniami, bowiem w trakcie jej wykonywania niedostępne są obiekty, do których odwołuje się wspomniany kod.

Intencją autora poniższej metody było zapewne wyświetlenie wartości zmiennej o wskazanej nazwie:

def broken_print_variable(var_name)
  eval %{puts "Wartość zmiennej #{var_name} wynosi " + #{var_name}.to_s}
end

Metoda eval dokonuje ewaluacji łańcucha w kontekście, w którym sama została wywołana; w powyższym przykładzie kontekstem tym jest ciało metody broken_print_variable, w którym zmienna definiowana na zewnątrz niego jest niewidoczna.

lewy_margines ...

Get Ruby. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.