لماذا الثاني 'ع ARG "تقرير المقام فو؟
-
07-07-2019 - |
سؤال
class Foo
def with_yield
yield(self)
end
def with_instance_eval(&block)
instance_eval(&block)
end
end
f = Foo.new
f.with_yield do |arg|
p self
# => main
p arg
# => #<Foo:0x100124b10>
end
f.with_instance_eval do |arg|
p self
# => #<Foo:0x100124b10>
p arg
# => #<Foo:0x100124b10>
end
لماذا الثانية "p arg
" تقرير المثال فو؟ لا ينبغي أن يقدم تقريرا nil
منذ with_instance_eval
لا تسفر self
إلى كتلة؟
المحلول
وعلى ما يبدو في روبي 1.8 instance_eval لا فقط تغيير قيمة الذات داخل كتلة المستقبل، فإنه ينتج أيضا تلك القيمة. في 1.9 هذا لم يعد هو الحال (وسيطة يكون لا شيء هناك)، لذلك لا يجب الاعتماد على ذلك السلوك (أنا أيضا متأكد من انها لا يحملون وثائق).
لا تنتمي إلى StackOverflow