如何将ruby类导入主文件?

时间:2016-05-31 02:35:38

标签: ruby

我正在尝试学习如何使用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

2 个答案:

答案 0 :(得分:15)

为了将类,模块等包含到其他文件中,您必须使用require_relativerequirerequire_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类的文件。您可以使用requirerequire_relative

执行此操作

在这种情况下,后者更适合您,因为它相对于指定了包含require的文件的目录加载文件。由于这可能是同一个目录,因此您只需按需调用文件名,而不按惯例添加.rb扩展名。

您可以谷歌'require vs require_relative ruby​​'来了解有关差异的更多信息。