Ruby:多个文件,一个“require”子句

时间:2014-05-19 13:59:33

标签: ruby-on-rails namespaces include partial-classes

我将几个类包装到一个模块中,为它们创建名称空间,存储在一个文件my_namespace.rb中。

module MyNamespace
    class Class1
    end

    class Class2
    end

    class Class3
    end

    class Class4
    end

    class Class5
    end
end

这个模块加入了一个条款:

require 'my_namespace'

这个模块现在很臃肿,所以我想在*.rb文件夹中的几个lib文件中拆分命名空间 - 每个类一个文件,但我担心它需要使用多个{{ 1}}条款 - 每个班级一个。如何保留一个require条款? (或者更确切地说:要求,包括或允许我使用我的课程的任何东西)

1 个答案:

答案 0 :(得分:2)

您可以首先查看文件夹,在加载时生成您的必需来电。例如

Dir[File.join(Rails.root, "path/to/directory/*.rb")].each {|file| require file }

所以,如果你的所有文件都在" / path / to /目录"文件夹他们都需要。

有些人赞成放弃" .rb"部分来自require的结尾,在这种情况下你会做

Dir[File.join(Rails.root, "path/to/directory/*.rb")].each {|file| require file.gsub(/\.rb$/,"") }

编辑 - 更新了rails项目文件夹中的路径,因为它们可能会在某处。在上面的例子中,我假设它们在<your project folder>/path/to/directory

使用继承时,此方法存在潜在风险,因为列出的文件的顺序可能与继承所需的顺序不同。即使你设法命名文件以便继承在Windows中工作,Linux也可能以不同的顺序对文件进行排序,这将破坏你所有的努力。在这种情况下,建议使用文件名数组。