当前位置:  开发笔记 > 后端 > 正文

当使用::?指定模块时,为什么Ruby不能在更高的范围内查找类?

如何解决《当使用::?指定模块时,为什么Ruby不能在更高的范围内查找类?》经验,为你挑选了1个好方法。

我只是坚持了一段时间.拿这个基础:

module Top
  class Test
  end

  module Foo
  end
end

后来,我可以通过这样做Foo来扩展内部的类Test:

module Top
  module Foo
    class SomeTest < Test
    end
  end
end

但是,如果我尝试通过使用::指定模块来最小化缩进:

module Top::Foo
  class Failure < Test
  end
end

这失败了:

NameError:未初始化的常量Top :: Foo :: Test

这是一个错误,还是Ruby解析变量名称的逻辑结果?



1> Sergio Tulen..:

这是一个错误,还是只是一个合乎逻辑的结果

这是一个"怪癖".有人认为这是一个错误.

用于查找未解析常量的父作用域由模块嵌套确定.它恰好发生在您使用时module Top::Foo,它只创建一个嵌套级别而不是两个嵌套级别.注意:

module Top
  module Foo
    class SomeTest
      Module.nesting # => [Top::Foo::SomeTest, Top::Foo, Top]
    end
  end
end

module Top::Foo
  class SomeTest
    Module.nesting # => [Top::Foo::SomeTest, Top::Foo]
  end
end


对我来说听起来像个错误:P但是信息非常丰富,谢谢
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有