6


1

この質問に関連して: 理想のRubyプロジェクト構造私はappname.rbがlibにあり、トップレベルであることに気づいた。

私はGithubでRakeのソースコードを少し読んでいましたが、それらのプロジェクト構造はほとんど同じであることに気付きました。 彼らは/ libにトップレベルの 'rake.rb’ファイルを持っていますが、それが何のためにあるのか私にはわかりません。

The Pickaxe(Programming Ruby 1.9)では、上記とほぼ同じディレクトリ構造を持つ小さなプロジェクトを構築する例を示していますが、/ lib内のトップレベルの.rbの使用については言及されていません。

それで、私の質問は次のとおりです。Rubyプロジェクトでこのことは通常何に使用されているのですか

これがばかげた質問であるならば申し訳ありません、私はそれがそうであると確信しています、しかし私はRubyに比較的新しいです。 私は今、そんなに多くのRuby-fooを知りません。 ;)

ありがとう。

2 Answer


5


通常(そして確かにrakeの例では) `+ appname.rb `ファイルは他の多くのファイルを必要とするショートカットです。 GitHubのRakeプロジェクトでそのファイルを見ると、それが行うことのほとんどは、 ` lib / rake `ディレクトリ内のファイルを必要とし、必要に応じてモジュールを含めることです。 そのファイルは、rakeが必要とする個々のファイルを知る必要なく、 ` require 'rake' +`を可能にするものです。


4


一部のプロジェクトでは、そのファイルで「+ require 」ではなく「 autoload 」を実行します。 後者は実際にすべてのクラスをロードしますが、前者は独自の ` 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