Diğer cevaplar iyidir. class_eval
'un referans sınıfını sabit olarak değil veya belirli bir nesneyi yamalamak istediğinizde kullanabileceğini eklemek ister.
örn.
huh = String
class huh
end
SyntaxError: (eval):2: class/module name must be CONSTANT
huh.class_eval <<-eof
def mamma
puts :papa
end
eof
"asdff".mamma
=> papa
Sen affectin bütün kök sınıfın olmadan belirli bir nesne yama class_eval
kullanabilirsiniz.
class << obj
...
end
instance_eval
bir kullanımına göre biraz daha farklı bir davranış olacaktır: olarak
obj = "asd"
obj.singleton_class.class_eval <<-eof
def asd
puts "gah"
end
undef_method :some_method
yukarıda
aynıdır.
How to monkey patch a ruby class inside a method
Ayrıca instance_eval
vs class_eval
ilgili sorular vardı ama bir bağlantı kullanışlı yok:
ilginç bu soruyu ve yanıtlarını bulmak.