ruby - 在这里使用 attr_accessor 是否更好?

标签 ruby oop instance-variables attr

我有课QuestionList它存储“问题”对象的列表。

class QuestionList

    attr_accessor :questions

    def initialize
        @questions = []
    end

end

然后,我将问题添加到列表中,然后从我的主类中“提出”这些问题,如下所示:

list = QuestionList.new
list.questions << Question.new(5, 3)
list.questions << Question.new(1, 5)
list.questions << Question.new(2, 4)

list.questions.each do |question|
    puts "#{question.ask}"
end

哪里Question.ask只是将问题输出为字符串。

我不确定使用 << 从我的主类写入实例变量是否可以接受运算符,和list.questions.push(Question.new(5, 3))从主类来看就更不清楚了。

拥有 QuestionsList.add_question(question) 会更好吗?方法?

list.questions.each 也是如此- 这可以在主类中使用吗?

最佳答案

我认为您在这里使用 attr_accessor 很好,但根据您继续添加的功能量,将该类的功能限制为类本身可能会更清楚。

关于使用 QuestionList 中的方法的问题,这将归结为可读性。不过,首先需要注意的是:您使用了 QuestionsList.add_question(question) 作为示例。这将创建一个类方法。这里您真正想要的是一个实例方法,其读作 list.add_question(question),因为您已经创建了列表的实例。 This blog post有一些关于类方法和实例方法之间差异的好信息。

我个人认为实例方法最能清楚地传达您的意图。我会写出 QuestionList 如下:

class QuestionList

  def initialize
    @questions = []
  end

  def add_question(question)
    @questions << question
  end

  def print_all_questions_in_list
    @questions.each do |question|
      puts "#{question.ask}"
    end
  end

end

This SO post如果您想了解更多信息,这里有一些有关 Ruby attr 方法的精彩信息。

关于ruby - 在这里使用 attr_accessor 是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40615999/

相关文章:

ruby - 总新手 : Instance variables in ruby?

ruby - ruby中是否存在/dev/null这样的变量

ruby - 如何使用 Selenium Ruby 滚动到底部?

mysql - 当同时连接到同一个表时,如何按 Rails 中的聚合计数进行排序?

oop - 什么时候防止类继承?

java - 如何强制子类重新定义 Java 中的常量?

Ruby 类实例变量和继承

ruby - 使用 Ruby 从 IP 地址解析域

c++ - 使用模板时获取 "Trigger Breakpoint Error at delete"

java - 匿名内部类在访问其原语等时是否总是捕获对 "this"(外部)对象的引用?