Ruby 1.9.3:导入给定目录中的所有文件

时间:2012-06-07 15:26:56

标签: ruby

我无法从给定目录导入我需要的所有.rb文件,我知道这个问题已经被问了很多,但是之前的帖子似乎都没有解决我的问题。

这是我的目录结构:

- Docs
- Lexer
- Parser
  --> Parser.rb
- SyntaxTree
  --> I want all the .rb files from here
  --> Sets.rb (Module I want to import)
      --> EMPTY_SET (constant I want to reference)
- Test
<Main Program>

我目前在Parser.rb工作,我需要从SyntaxTree目录中获取所有.rb文件,以便我可以在Parser.rb中引用它们。我还想导入Sets.rb中包含的Sets模块。

以下是我目前尝试导入我在之前大多数帖子中看到的所有ruby文件的方法:

Dir['../SyntaxTree/*.rb'].each {|file| require file}

我也尝试过:

Dir['../SyntaxTree/*.rb'].each {|file| require_relative file}

使用这些方法中的任何一种,在尝试包含Sets模块时仍然会出错:

class Parser
  include Sets
  .
  .
end
`<class:Parser>': uninitialized constant Parser::Sets (NameError)

如果我直接包含Sets.rb错误就会消失

任何想法都会非常有用。

1 个答案:

答案 0 :(得分:1)

最好的方法是在模块中设置适当的autoload依赖项,以便按需加载所需的类。如果您只是使用require加载所有文件,那么根据文件名加载它们的顺序并不明显,并且任何相互依赖性都无法解决。

这就是为您的应用程序提供顶级命名空间可以提供帮助的原因。例如:

module MyApp
  autoload(:Parser, 'my_app/parser')
  autoload(:Sets, 'my_app/sets')
end

现在这些类应该按需自动加载。