我正在尝试学习如何使用Ruby编程,我想为单独的类创建单独的文件,但是当我这样做时,我收到以下消息:
NameError:未初始化的常量书籍 org / jruby / RubyModule.java中的const_missing:2677
(root)atUsers/Friso/Documents/Projects/RubyApplication1/lib/main.rb:1
但是,如果我将类直接放入主文件中,它就可以工作。我该如何解决这个问题?
主要代码:
book1 = Book.new("1234", "Hello", "Ruby")
book2 = Book.new("4321", "World", "Rails")
book1.to_string
book2.to_string
班级代码:
class Book
def initialize(isbn,title,author)
@book_isbn=isbn
@book_title=title
@book_author=author
end
def to_string
puts "Title: #@book_title"
puts "Author: #@book_author"
puts "ISBN: #@book_isbn"
end
end
答案 0 :(得分:15)
为了将类,模块等包含到其他文件中,您必须使用require_relative
或require
(require_relative
更加Rubyish。)例如此模块:
module Format
def green(input)
puts"\e[32m#{input}[0m\e"
end
end
现在我有了这个文件:
require_relative "format" #<= require the file
include Format #<= include the module
def example
green("this will be green") #<= call the formatting
end
同样的概念适用于课程:
class Example
attr_accessor :input
def initialize(input)
@input = input
end
def prompt
print "#{@input}: "
gets.chomp
end
end
example = Example.new(ARGV[0])
现在我有了主文件:
require_relative "class_example"
example.prompt
要从另一个文件中调用任何类或模块,您必须要求它。
我希望这会有所帮助,并回答你的问题。
答案 1 :(得分:5)
您需要指示Ruby运行时加载包含Book类的文件。您可以使用require
或require_relative
。
在这种情况下,后者更适合您,因为它相对于指定了包含require
的文件的目录加载文件。由于这可能是同一个目录,因此您只需按需调用文件名,而不按惯例添加.rb
扩展名。
您可以谷歌'require vs require_relative ruby'来了解有关差异的更多信息。