什么是/ lib中通常用于Ruby项目的<appname> .rb文件?</appname>

时间:2009-10-14 17:18:09

标签: ruby structure

参考这个问题:Ideal ruby project structure我注意到appname.rb在lib中,并且是顶级的。

我正在阅读Github上的一些Rake源代码,我注意到他们的项目结构几乎相同。他们在/ lib中有一个顶级的“rake.rb”文件,但我不确定它的用途。

在Pickaxe(Ruby 1.9编程)中,他们展示了一个构建一个小项目的例子,上面的目录结构几乎相同,但没有提到在/ lib中使用顶级.rb。 / p>

所以,我的问题是:这个东西在Ruby项目中通常用于什么?

很抱歉,如果这是一个愚蠢的问题,我确信它是,但我对Ruby相对较新。我现在不太了解Ruby-foo。 ;)

感谢。

2 个答案:

答案 0 :(得分:5)

通常(当然在rake的例子中)appname.rb文件是需要许多其他文件的快捷方式。如果您在GitHub上的Rake项目中查看该文件,它所做的大部分工作都需要lib/rake目录中的文件,并根据需要包含模块。该文件让您require 'rake'无需知道单个文件需要什么。

答案 1 :(得分:4)

Emily's answer

为基础

某些项目在该文件中执行autoload而不是require。后者实际上会加载所有类,而前者只是告诉类加载系统如果在没有自己的require语句的情况下引用它们,如何找到它们。

所以模式看起来像:

# in foo_project/lib/foo.rb:
module Foo
  autoload :Bar, 'foo/bar'
  autoload :Baz, 'foo/baz'
end

# in foo_project/lib/foo/bar.rb:
module Foo
  class Bar
  ...
end

# in foo_project/lib/foo/baz.rb:
module Foo
  class Baz
  ...
end

然后,在您的项目中,您可以执行以下操作:

require 'foo'
# note: no require 'foo/bar' or 'foo/baz'
my_bar = Foo::Bar.new