我在 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>'
您收到错误是因为您的
require 'book'
行需要来自其他地方的其他 book.rb
,而它没有定义 Book
类。
Ruby 不会自动将当前目录包含在它将搜索
require
的目录列表中,因此如果您想要当前目录中的文件,您应该显式地在前面添加 ./
,即。
require './book'
您已经定义了初始化方法,但忘记将值分配给实例变量,并且代码中的拼写错误触发了错误,将其修复为:
书.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 和面向对象编程的正确知识。我建议你从《红宝石之书》开始。
在 Rails 应用程序中,此错误也可能是由于重命名类而没有重命名文件以匹配而引起的,这是我发现此错误时遇到的问题:
书.rb
class Book
def initialize(name, author)
end
end
book_test.rb
class BookTest
harry_potter = Book.new("Harry Potter", "JK")
end
另一个菜鸟错误(我犯的)是在模块内定义一个类,但忘记将其放入文件夹中:
# This file should go inside a folder called `SomeModule` and it should be named `some_class.rb`
module SomeModule
class SomeClass
# ...
end
end
我知道这不是你的情况,因为类定义,但我还是想分享它。