0

这些是我的测试代码:

1.rb:

module M
  A = 'Outer Constant'
  class C
    A = 'Inner Constant'
  end
  class M
    class C
      A="Inner Constant 2"
    end
  end
end

2.rb

load('1.rb')

3.rb

load('2.rb', true)
puts String.class
puts M::A

当我运行时ruby 3.rb,它返回:

class
Outer Constant

我认为它应该因为 引发错误load('', true),但事实并非如此。请告诉我为什么。

4

1 回答 1

0

方法的行为与Kernel#load它出现的上下文无关。即使2.rb是从3.rb包裹模式加载,这对如何1.rb加载2.rb. 1.rb在没有包装模式的情况下加载,因此在普通命名空间下,这意味着M::A可以从3.rb.

于 2013-07-20T08:58:35.023 回答