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

The*_*ilz 8 ruby ruby-on-rails rubymine ruby-on-rails-3 rubymine-7

我在RubyMine中有这两个类:

book.rb

 class Book
   def initialize(name,author)
   end
 end
Run Code Online (Sandbox Code Playgroud)

test.rb

require 'book'
class teste
   harry_potter = Book.new("Harry Potter", "JK")
end
Run Code Online (Sandbox Code Playgroud)

当我运行test.rb时,我收到此错误:C:/Users/DESKTOP/RubymineProjects/learning/test.rb:3:in'from <class:Test>': uninitialized constant Test::Book (NameError) from C:/Users/DESKTOP/RubymineProjects/learning/test.rb:1:in-e:1:in load' from -e:1:in'

sma*_*thy 18

您收到错误是因为您的require 'book'行要求其他book.rb地方的其他人,而不是定义Book类.

Ruby不会自动将当前目录包含在它将搜索的目录列表中,require因此./如果要在当前目录中需要文件,则应显式地添加一个目录,即.

require './book'
Run Code Online (Sandbox Code Playgroud)

  • 感谢StackOverflow中的某个人有更好的方法. (4认同)
  • 你应该[接受我的回答](http://stackoverflow.com/help/accepted-answer),如果它是最好的,并帮助你解决问题.请参阅[当有人回答我的问题时我该怎么办?](http://stackoverflow.com/help/someone-answers)了解所有这些内容的详细信息. (2认同)

Sha*_*med 9

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

book.rb

class Book
  def initialize(name,author)
    @name = name
    @author = author
  end
end
Run Code Online (Sandbox Code Playgroud)

test.rb

require './book'
class Test
  harry_potter = Book.new("Harry Potter", "JK")
end
Run Code Online (Sandbox Code Playgroud)

那么,您关注哪本书或资源?我认为你至少应该完成一本书,以获得关于Ruby和面向对象编程的正确知识.我会建议你开始使用'The Book of Ruby'.


JP.*_*JP. 7

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

书.rb

class Book
  def initialize(name, author)
  end
end
Run Code Online (Sandbox Code Playgroud)

书测试.rb

class BookTest
  harry_potter = Book.new("Harry Potter", "JK")
end
Run Code Online (Sandbox Code Playgroud)