web-dev-qa-db-ja.com

Rubyクラスの初期化されていない定数エラー

RubyMineには次の2つのクラスがあります。

book.rb

_ class Book
   def initialize(name,author)
   end
 end
_

test.rb

_require 'book'
class teste
   harry_potter = Book.new("Harry Potter", "JK")
end
_

Test.rbを実行すると、次のエラーが表示されます: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_ 」

9
TheKilz

初期化メソッドを定義しましたが、インスタンス変数に値を割り当てるのを忘れており、コードのタイプミスがエラーを引き起こし、次のように修正しました:

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

つまり、どの本またはリソースをフォローしていますか?Rubyとオブジェクト指向プログラミングの適切な知識を得るためには、少なくとも本を完了する必要があります。私はあなたに「本Ruby 'から始めます。

9
Sharvy Ahmed

require 'book'行がBookクラスを定義していない別の場所から他のbook.rbを必要としているため、エラーが発生しています。

Rubyはrequireを検索するディレクトリのリストに現在のディレクトリを自動的に含めないため、現在のディレクトリにファイルを必要とする場合は、./を明示的に付加する必要があります。

require './book'
18
smathy

Railsアプリでは、このエラーは、ファイルの名前を変更せずにクラスの名前を変更した場合にも発生する可能性があります。これは、このエラーを見つけたときの問題でした:

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.