13

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

3 回答 3

23

您收到错误是因为您的require 'book'行需要其他book.rb地方的其他内容,而这些内容没有定义Book类。

Ruby 不会自动将当前目录包含在它会搜索的目录列表中,所以如果你想在当前目录中需要一个文件,require你应该显式地在前面加上 a ,即。./

require './book'
于 2015-03-18T21:51:51.613 回答
9

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

书本.rb

class Book
  def initialize(name,author)
    @name = name
    @author = author
  end
end

测试.rb

require './book'
class Test
  harry_potter = Book.new("Harry Potter", "JK")
end

那么,您关注的是哪本书或资源?我认为您至少应该完成一本书来获得有关 Ruby 和面向对象编程的正确知识。我建议你从“红宝石之书”开始。

于 2015-03-18T21:31:08.050 回答
2

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

书本.rb

class Book
  def initialize(name, author)
  end
end

book_test.rb

class BookTest
  harry_potter = Book.new("Harry Potter", "JK")
end
于 2018-03-15T21:19:39.987 回答