【问题标题】:Return array with class instances [closed]返回带有类实例的数组[关闭]
【发布时间】:2013-08-08 09:55:48
【问题描述】:

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

例如:

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,但我如何返回这些实例的数组?抱歉英语不好。

提前致谢!

【问题讨论】:

  • 你知道@@x vars 是什么吗?
  • 另外,@@array 是什么?
  • 我是新手,@@var 是一个类变量。
  • 这是我的帖子中的一个错误。我想返回数组中添加的所有 Book 实例。
  • 请在您的问题陈述中包含相关代码。在 cmets 中使用 sn-ps 和 github 链接并不是表达 stackoverflow 问题的真正合适方式。

标签: ruby arrays class variables


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    类变量由类的所有实例共享,因此在初始化新的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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-20
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多