Metodele class_eval (sau module_eval) și instance_eval evaluează un bloc de cod schimbând temporar self, permițând injectarea de metode noi, definirea de DSL-uri elegante și accesarea variabilelor private.
# 1. instance_eval pe o instanță (permite acces la variabile private):
class Secret
def initialize() @parola = "top_secret_99" end
end
s = Secret.new
valoare = s.instance_eval { @parola }
puts "Parolă extrasă: #{valoare}"
# 2. class_eval pe o clasă (adaugă metode de instanță noi):
String.class_eval do
def inversat_cu_linii
self.chars.join("-")
end
end
puts "ruby".inversat_cu_linii # "r-u-b-y"
Regulă mnemotehnică: class_eval se apelează pe o clasă pentru a defini metode disponibile pe toate instanțele viitoare; instance_eval se apelează pe un obiect individual pentru a defini metode singleton exclusive.
Întrebări & Exemple de Cod:
class_eval și instance_eval în Ruby: Metaprogramare în Contextul ObiectelorAi o nelămurire despre utilizarea comenzii
class_eval și instance_eval în Ruby: Metaprogramare în Contextul Obiectelorsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.