web-dev-qa-db-fra.com

Erreur constante non initialisée dans la classe Ruby

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 '

5
TheKilz

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.

6
Sharvy Ahmed

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'
16
smathy

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
0
JP.