【问题标题】:Differences in instance_eval behaviour between Ruby 1.9.1 and 1.8.6?Ruby 1.9.1 和 1.8.6 之间 instance_eval 行为的差异?
【发布时间】:2009-08-04 15:02:58
【问题描述】:

我注意到类变量 @@my_class var 现在在 Ruby 1.9.1 中的 instance_eval'd 对象的上下文中查找,而在 Ruby 1.8.6 中并非如此。

Ruby 1.9.1 的 instance_eval 行为还有哪些其他差异?

【问题讨论】:

    标签: ruby ruby-1.9 ruby-1.8


    【解决方案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
    

    【讨论】:

    • 我认为这是不正确的。尝试运行1.9和1.8的代码,输出是一样的。
    • 对于 2009 年可用的 1.9 版本来说可能是准确的 :)
    【解决方案2】:

    我认为它 [至少目前] 也不会返回 self。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-05
      • 2021-10-18
      • 1970-01-01
      • 2018-10-25
      • 2014-07-25
      • 2020-03-14
      • 2011-11-04
      相关资源
      最近更新 更多