Ruby class 中未初始化的常量错误

Uninitialized constant error in Ruby class

我在 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

当我 运行 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 `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'

您已经定义了初始化方法,但忘记将值赋给实例变量,并且代码中的拼写错误触发了错误,已将其修复为:

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 和面向对象编程的正确知识。我建议你 'The Book of Ruby' 开始。

您收到错误是因为您的 require 'book' 行需要来自其他地方的一些其他 book.rb,它没有定义 Book class。

Ruby 不会自动将当前目录包含在它会搜索 require 的目录列表中,因此如果您需要一个文件,您应该明确地在前面加上 ./在当前目录中,即。

require './book'

在 Rails 应用程序中,此错误也可能是由于重命名 class 而未重命名要匹配的文件引起的,这是我发现此错误时的问题:

book.rb

class Book
  def initialize(name, author)
  end
end

book_test.rb

class BookTest
  harry_potter = Book.new("Harry Potter", "JK")
end