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 (pretty print), но сначала вам нужно это потребовать.

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-chars, а не 4.