我正在尝试将3个值放入数组的每个索引中。这些值是针对class
,assignment
和grade
的。它们来自名为Grade_Log
的类对象。
我遇到输出问题。
class Grade_Log
attr_accessor :which_class, :assignment_type, :grade
def initialize(which_class, assignment_type, grade)
@which_class = which_class
@assignment_type = assignment_type
@grade = grade
end
end
#values are assigned to add_class, add_assignment, and add_grade
grade_index[grade_index_tally] = Grade_Log.new(add_class,add_assignment,add_grade)
puts grade_index[grade_index_tally]
我希望输出它,例如"PHYSICS, HOMEWORK, 95"
,但是我得到了以下内容。 #<Grade_Log:0x0000000002baaa20>
答案 0 :(得分:3)
如果您希望能够-P
类的一个实例,则需要为该类定义puts
。现在,很可能使用默认的Grade_Log
方法。
我认为您想要这样的东西:
to_s
与以下基本相同:
to_s
答案 1 :(得分:1)
实例化Grade_Log
对象时,将调用initialize方法,并将参数分配给属性:
tmp = GradeLog.new("PHYSICS", "HOMEWORK", 95)
puts
变量,您将获得对象信息:
puts tmp #=> #<Grade_Log:0x007fc27213f3a8>
要访问属性,您应该
puts tmp.which_class #=> PHYSICS
puts tmp.assignment_type #=> HOMEWORK
puts tmp.grade #=> 95
一种查看对象内容的快速方式是inspect
方法:
puts tmp.inspect #=> #<Grade_Log:0x007fd7e6917358 @which_class="PHYSICS", @assignment_type="HOMEWORK", @grade=95>
与使用Kernel#p相同:
p tmp #=> #<Grade_Log:0x007fd7e6917358 @which_class="PHYSICS", @assignment_type="HOMEWORK", @grade=95>
tmp.instance_variables.map { |v| tmp.instance_variable_get(v) } #=> ["PHYSICS", "HOMEWORK", 95]
或者在类中定义一个自定义方法,以获取值数组,例如(添加新属性时无需编辑该方法):
def attributes_values
instance_variables.map { |v| instance_variable_get(v) }
end
所以你可以打电话给
tmp.attributes_values #=> ["PHYSICS", "HOMEWORK", 95]
to_s
方法来覆盖默认的Object#to_s方法,以调用puts tmp
。