J'ai ces deux classes dans RubyMine:
book.rb
class Book
def initialize(name,author)
end
end
test.rb
require 'book'
class teste
harry_potter = Book.new("Harry Potter", "JK")
end
Lorsque j'exécute test.rb, le message d'erreur suivant s'affiche: C: /Users/DESKTOP/RubymineProjects/learning/test.rb: 3: in <class:Test>': uninitialized constant Test::Book (NameError)
from C:/Users/DESKTOP/RubymineProjects/learning/test.rb:1:in
' From -e: 1: in load'
from -e:1:in
'
Vous avez défini la méthode d'initialisation, mais vous avez oublié d'attribuer les valeurs à des variables d'instance. Une faute de frappe dans votre code a déclenché l'erreur, corrigée comme suit:
book.rb
class Book
def initialize(name,author)
@name = name
@author = author
end
end
test.rb
require './book'
class Test
harry_potter = Book.new("Harry Potter", "JK")
end
Alors, quel livre ou ressource suivez-vous? Je pense que vous devriez au moins terminer un livre pour bien connaître la programmation orientée objet et Ruby. Je vous suggérerais «Le livre de Ruby» pour commencer.
Vous obtenez l'erreur parce que votre ligne require 'book'
requiert un autre book.rb
ailleurs, qui ne définit pas une classe Book
.
Ruby n'inclut pas automatiquement le répertoire actuel dans la liste des répertoires. Il recherchera une variable require
. Vous devez donc ajouter explicitement un ./
si vous souhaitez exiger un fichier dans le répertoire actuel, c'est-à-dire.
require './book'
Dans une application Rails, cette erreur peut également être provoquée par le renommage de la classe sans renommer le fichier à mettre en correspondance, ce qui était mon problème lorsque j'ai trouvé cette erreur:
book.rb
class Book
def initialize(name, author)
end
end
book_test.rb
class BookTest
harry_potter = Book.new("Harry Potter", "JK")
end