web-dev-qa-db-fra.com

Inclusion d'une classe Ruby à partir d'un fichier séparé

Pendant un temps, j'avais inclus une classe entière dans un module Ruby. Apparemment, ce n'est pas ce que je suis censé faire. Il semble que le but d'un module est de stocker des fonctions qui peuvent ensuite être incluses en tant que méthodes dans une nouvelle classe. 

Je ne veux pas ça. J'ai une classe que je veux conserver dans un fichier séparé auquel je peux accéder à partir d'autres fichiers. Comment puis-je faire ceci?

Merci.

35
user94154

Les modules servent à la fois de détenteurs de fonctions et d’espaces de noms. Garder les cours dans les modules est parfaitement acceptable. Pour mettre une classe dans un fichier séparé, définissez la classe comme d'habitude, puis dans le fichier dans lequel vous souhaitez utiliser la classe, mettez simplement require 'name_of_file_with_class' en haut. Par exemple, si je définissais la classe Foo dans foo.rb, dans bar.rb j'aurais la ligne require 'foo'.

Si vous utilisez Rails, cela se produit souvent automatiquement.

Edit: clarification de la disposition des fichiers

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

...

#file: bar.rb
require 'foo'

Foo.new

Si vous êtes dans Rails, mettez ces classes dans lib/ et utilisez la convention de dénomination pour les fichiers de la version minuscule soulignée du nom de la classe, par exemple. Foo -> foo.rb, FooBar -> foo_bar.rb, etc.

À partir de la version 1.9 de Ruby, vous pouvez utiliser require_relative, pour exiger des fichiers relativement au fichier que vous modifiez.

57
Ben Hughes

Vous pouvez également utiliser la charge. Aussi, vous utilisez require relative si le fichier est dans le même répertoire. Lisez ce lien pour mieux comprendre: http://rubylearning.com/satishtalim/including_other_files_in_Ruby.html

0
jhamezzz1315