الاختلافات في السلوك instance_eval بين روبي 1.9.1 و1.8.6؟
سؤال
ولقد لاحظت أن المتغيرات الطبقةmy_class فار وينظر الآن حتى في سياق الكائن instance_eval'd في Ruby 1.9.1 بينما هذا لم يكن الحال في روبي 1.8.6.
ما هي بعض الاختلافات الأخرى في سلوك instance_eval لروبي 1.9.1؟
المحلول
لا أستطيع ذكرها جميعا، لكني أعرف أن هناك بعض التغييرات في بحث مستمر. في 1.8، وكان البحث المستمر في نطاق المتصلين، أثناء وجوده في نطاق كتل في 1.9.
FOO = "hi"
class Something
FOO = "bye"
def self.handle(&block)
instance_eval(&block)
end
end
p Something.handle { FOO }
# "hi" on 1.8, "bye" on 1.9
نصائح أخرى
وأعتقد أنه [على الأقل في الوقت الحالي] لا تعود النفس أيضا.
لا تنتمي إلى StackOverflow