【问题标题】:`require`ing files in a common codebase`require`ing 通用代码库中的文件
【发布时间】:2014-12-06 17:19:47
【问题描述】:

我是编写大型 Rub​​y 项目的新手(目前只有模组和应用程序脚本)。我制作了一个项目,其中一些文件位于项目根目录中,其他文件位于子文件夹中,包括“测试”文件夹。

到目前为止我已经尝试过:

  • 将所有文件夹和子文件夹添加到 RubyMine 中的加载路径。
  • 将所有文件声明为同一模块的一部分。

我曾想过使用require_relative 来加载所需的所有文件,但它看起来很烦人而且非常Java 风格......有没有更好的方法?

【问题讨论】:

    标签: ruby require


    【解决方案1】:

    以下是典型文件夹结构、其模块以及如何将所有内容包含到库中的示例。然后,您只需要require 'lib' 任何您想拉入库以供使用的地方。

    # Root folder structure of project
    lib.rb
    ./lib/a.rb
    ./lib/b.rb
    ./lib/b/c.rb
    
    # lib.rb
    require 'lib/a'
    require 'lib/b'
    
    module Lib
    end
    
    # ./lib/a.rb
    module Lib
      module A
      end
    end
    
    # ./lib/b.rb
    require 'lib/b/c'
    module Lib    
      module B
      end
    end
    
    # ./lib/b/c.rb
    module Lib
      module B
        module C
        end
      end
    end
    

    【讨论】:

    • 另外——在我的例子中,所有文件(a.rb、b.rb、c.rb)都在同一个模块中,因为每个文件都以相同的模块声明开头。
    • 哦,是的。抱歉,我忽略了这一点。我会更新以更清楚地说明它们都属于同一个模块。
    • 此外,这也是库/项目通常在 Ruby 中构建的方式。您确实需要文件中的库的所有组件。使用某种机制来自动单独(和单独)需要所有文件并没有多大意义,因为当需要在其他代码(如应用程序)中实际需要库时,您只能使用Ruby 内置的代码加载功能,例如require。因此,如果您像这样构建您的库,您只需 require 'lib' 并且所有其他文件都作为顶级模块的一部分加载。
    • 好的,谢谢!似乎我的问题有点令人费解,但解决方案只是需要一切。制作要求“网关”的巧妙小技巧很好。
    猜你喜欢
    • 2011-06-13
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2012-10-30
    • 2012-11-19
    • 2013-06-05
    相关资源
    最近更新 更多