返回带有类实例的数组

时间:2013-08-08 09:55:48

标签: ruby arrays class variables

我很简单,如何使用类实例返回数组?我正在尝试返回数组,但是这个变量返回一个空数组。

例如:

class Library

    def initialize
        @@books = []
    end

    def all
        @@books
    end

    def add_book(arg = {})
        @book = Book.new(arg)
        @@books << @book
    end

end

class Book

    attr_accessor :name, :year, :author, :content

    def initialize( arg = {})
        @name = arg[:name]
        @year = arg[:year]
        @author = arg[:author]
        @content = arg[:content]
    end

end

@@ books是一个Library类变量。我使用方法add_book将书籍放入@books,但我怎样才能返回这些实例的数组?抱歉英文不好。

提前致谢!

2 个答案:

答案 0 :(得分:1)

当您调用方法new来创建新对象时,ruby会运行initialize方法。由于initialize方法将@@books设置为空数组,因此Library.new.all将返回一个空数组。

答案 1 :(得分:0)

类变量由类的所有实例共享,因此在初始化新Library时重置它是没有意义的,因为您将所有其他Library中存储的书归零。 1}}实例。根据您的使用情况,您看起来想要一个普通的实例变量:

class Library
  def initialize
    @books = []
  end

  # you could replace this method with a `attr_reader :books`
  def all
    @books
  end

  # consider changing the method signature to accept a Book instance
  def add_book(arg = {})
    @books << Book.new(arg)
  end
end