为什么不包含模块显示?

时间:2012-11-21 13:13:24

标签: ruby-on-rails ruby ruby-on-rails-3

在我的config / initializers / refinery文件夹中,有一些配置文件结构为

initializers
 ├── backtrace_silencers.rb
 ├── inflections.rb
 ├── mime_types.rb 
 ├── refinery
 │   ├── authentication.rb
 │   ├── core.rb
 │   ├── i18n.rb
 │   ├── images.rb
 │   ├── page_images.rb
 │   ├── pages.rb
 │   └── resources.rb
 ├── secret_token.rb
 ├── session_store.rb
 └── wrap_parameters.rb

refinery/rails console --sandbox一起,

  Refinery.included_modules
  #=> [] 

为什么呢?当我在Refinery::P之后按 Tab 时,它会显示以下模块。

Refinery::Page                 Refinery::PagePart             Refinery::PaginationHelper     
Refinery::PageImages           Refinery::Pages                Refinery::Plugin               
Refinery::PageImagesGenerator  Refinery::PagesGenerator       Refinery::Plugins  

如果它有::,它必须在某个地方并且必须包含它。那么为什么include_modules有效?如果我错了请纠正我,并告诉我正确的方法来显示模块内的模块或类。我提到http://www.ruby-doc.org/core-1.9.3/Module.html

1 个答案:

答案 0 :(得分:0)

Refinery中没有“包含”这些模块,这就是included_modules中没有列出这些模块的原因。

“包含”在Ruby中具有特定含义 - 基本上,当一个类或模块“混入”另一个模块时 - 而Refinery::Page之类的东西是命名空间。查看Pragmatic Programmer's Guide,这很好地解释了它。

尝试使用Refinery.constants来获取您的目标。