我的"文件1"
C:\Ruby200\lib\ruby\gems\2.0.0\gems\page-object-0.9.2\lib\page-object.rb
和我的目录
C:\Ruby200\lib\ruby\gems\2.0.0\gems\page-object-0.9.2\lib\page-object
由于页面对象gem安装,位于我的硬盘上。
在"文件1"的内容中,在其他代码行中,我看到以下行:
require 'page-object/page_populator'
在同一个文件中,我看到:
module PageObject
include PagePopulator
查看"文件2"
C:\Ruby200\lib\ruby\gems\2.0.0\gems\page-object-0.9.2\lib\page-object\page_populator.rb
这些行位于此文件的顶部:
module PageObject
module PagePopulator
根据我阅读的Ruby教程,说明在要求"文件2"进入"文件1"使用require
,来自"文件2和#34;的模块需要被包含在"文件1"与include
。
我希望"文件1"
include PageObject::PagePopulator
而不是
include PagePopulator
但是,由于它没有以这种方式设置,并且page-object是一个广泛使用的gem,我相信在两个文件中都有PageObject
模块消除了
include PageObject::PagePopulator
,因为
include PagePopulator
就足够了。
我想确认我的假设是正确的。
阅读了有关Module.nesting方法的内容,并阅读了googling"重新开放类/模块"返回的链接。查询,我仍然没有找到我的问题的答案。
我会再次尝试描述它。
file_a的内容如下:
require "file_b"
module Foo
include Bar
...
end
file_b的内容如下:
module Foo
module Bar
...
end
我们不应该使用的解释在哪里 在file_a中如下:
include Foo::Bar
而不是
include Bar
以及我之前写的方式:
include Bar
就足够了
如果我们有
会有什么不同file_c,内容如下:
module Bar
...
end
这是否意味着从file_c到file_b包含模块没有区别?
file_a的内容与file_b中的模块和来自file_c的模块如下:
require "file_b"
require "file_c"
module Foo
include Bar
...
end
如果是这种情况,在file_b中有模块Foo是什么意思?
答案 0 :(得分:0)
我认为你要问的是在ruby中进行常量查找的规则:当你在代码中编写Bar
时,ruby如何找到该常量的值?
事情所处的文件是无关紧要的,重要的是
module Foo
...
end
对Bar
的引用将尝试Foo::Bar
,然后是顶级::Bar
常量(常量范围是词法范围的)
因此,如果先前已定义Foo::Bar
,则
module Foo
include Foo::Bar
end
并且
module Foo
include Bar
end
做同样的事情。
Module.nesting
方法将显示此查找链。 Ruby还将搜索当前打开的类/模块的祖先。有一些陷阱/角落案例,但这些是基础知识。