Как распечатать атрибут класса из массива?

#arrays #ruby #class #element #record

Вопрос:

Скажем, у меня есть такой класс

 class Date   attr_accessor :day, :month, :year end  

И я создаю для него 3 записи и добавляю каждую в массив.

 class Date   attr_accessor :day, :month, :year end  date = Date.new() date.day = 31 date.month = 12 date.year = 2019 array = [] array lt;lt; date  date = Date.new() date.day = 30 date.month = 2 date.year = 2014 array lt;lt; date  date = Date.new() date.day = 23 date.month = 1 date.year = 2012 array lt;lt; date  

Если бы я хотел поместить date.day (или каждый атрибут) из третьей записи/третьего элемента массива конкретно, как бы я получил к нему доступ (если я хочу распечатать его или получить доступ к нему из другой функции/процедуры, когда требуется конкретный пользовательский ввод)? Что-то вроде puts array[2], очевидно, не работает.

Комментарии:

1. Название Date -действительно плохой выбор, так как оно уже является частью стандартной библиотеки Ruby.

2. А, ладно. Есть ли способ заранее узнать, что входит в стандартную библиотеку Ruby/способ проверить это?

3. ну, это немного сложно — Date на самом деле не определено, пока вы этого не потребуете. В Ruby есть несколько списков зарезервированных слов, но я думаю, что единственный реальный способ проверить наличие коллизии имен-это поиск в документах.

Ответ №1:

array[2] вернет третий элемент из массива. Когда вы захотите позвонить day , вы можете написать

 puts array[2].day  

Если вы хотите напечатать день всех элементов в массиве, вам может потребоваться сделать:

 array.each do |element|  puts element.day end