web-dev-qa-db-ja.com

別のファイルからRubyクラスを含める

しばらくの間、Rubyモジュール内にクラス全体を含めていました。明らかに、これは私がやるべきことではありません。モジュールのポイントは、次に、新しいクラスのメソッドとして含まれます。

これは欲しくありません。他のファイルからアクセスできる別のファイルに保持したいクラスがあります。これどうやってするの?

ありがとう。

38
user94154

モジュールは、関数のホルダーと名前空間としての二重の目的を果たします。クラスをモジュールに保持することは完全に受け入れられます。クラスを別のファイルに配置するには、通常どおりクラスを定義してから、クラスを使用するファイルで、require 'name_of_file_with_class'を先頭に配置します。たとえば、foo.rbでクラスFooを定義した場合、bar.rbrequire 'foo'という行があります。

Railsを使用している場合、このインクルードは多くの場合自動的に行われます

編集:ファイルレイアウトの明確化

#file: foo.rb
class Foo
  def initialize
    puts "foo"
  end
end

...

#file: bar.rb
require 'foo'

Foo.new

Railsを使用している場合は、これらのクラスをlib/に配置し、クラス名の小文字の下線付きバージョンのファイルの命名規則を使用します。 Foo-> foo.rbFooBar-> foo_bar.rbなど.

Rubyバージョン1.9の時点では、require_relativeを使用して、編集中のファイルに対して相対的にファイルを要求できます。

62
Ben Hughes

ロードを使用することもできます。また、ファイルが同じディレクトリにある場合は、require relativeを使用します。さらに理解するためにこのリンクを読んでください: http://rubylearning.com/satishtalim/include_other_files_in_Ruby.html

0
jhamezzz1315

Requireを使用する場合、文字列内は、Rubyのルートフォルダーにない限り、参照しているクラスのフルパス名を示します。

0
Curtis Moxam