-1

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

例如 :

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 是一个库类变量。我正在使用 add_book 方法将书籍放入@books,但我如何返回这些实例的数组?抱歉英语不好。

提前致谢 !

4

2 回答 2

1

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

于 2013-08-08T14:02:47.063 回答
0

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

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
于 2013-08-08T14:22:10.110 回答