我有课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/