1

我无法从给定目录导入我需要的所有 .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错误就会消失

任何想法都会非常有帮助。

4

1 回答 1

1

最好的方法是在模块中设置适当的autoload依赖关系,以便按需加载所需的类。如果您只是在 using 中加载所有文件require,则必须根据文件名加载它们的顺序并不明显,并且不会解决任何相互依赖关系。

这就是为什么为您的应用程序拥有一个顶级命名空间会有所帮助的原因。例子:

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

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

于 2012-06-07T15:34:00.373 回答