Ruby: метод печати и аккуратного массива
Я не уверен, что этот вопрос слишком глуп, но я не нашел способ сделать это.
Обычно для размещения массива в цикле я делаю это
current_humans = [.....]
current_humans.each do |characteristic|
puts characteristic
end
Однако, если у меня есть это:
class Human
attr_accessor:name,:country,:sex
@@current_humans = []
def self.current_humans
@@current_humans
end
def self.print
#@@current_humans.each do |characteristic|
# puts characteristic
#end
return @@current_humans.to_s
end
def initialize(name='',country='',sex='')
@name = name
@country = country
@sex = sex
@@current_humans << self #everytime it is save or initialize it save all the data into an array
puts "A new human has been instantiated"
end
end
jhon = Human.new('Jhon','American','M')
mary = Human.new('Mary','German','F')
puts Human.print
Это не работает.
Конечно, я могу использовать что-то вроде этого
puts Human.current_humans.inspect
но я хочу узнать другие альтернативы!
Ответы
Ответ 1
Вы можете использовать метод p
. Использование p
фактически эквивалентно использованию puts
+ inspect
для объекта.
humans = %w( foo bar baz )
p humans
# => ["foo", "bar", "baz"]
puts humans.inspect
# => ["foo", "bar", "baz"]
Но имейте в виду, что p
- это больше инструмент отладки, он не должен использоваться для печати записей в обычном рабочем процессе.
Существует также pp
(довольно печатная версия), но вам нужно сначала его потребовать.
require 'pp'
pp %w( foo bar baz )
pp
лучше работает со сложными объектами.
В качестве побочного примечания не используйте явный возврат
def self.print
return @@current_humans.to_s
end
должен быть
def self.print
@@current_humans.to_s
end
И используйте отступ 2-х символов, а не 4.