Когда вы создаете экземпляр объекта Grade_Log
, вызывается метод инициализации и параметры присваиваются атрибутам:
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
A быстрый способ просмотра содержимого объекта это метод 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>
Другой вариант -
получить доступ к переменным экземпляра ,
Object.html # instance_variables и
Object.html # instance_variable_get :
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
.