web-dev-qa-db-fra.com

Ruby: méthode pour imprimer et nettoyer un tableau

Je ne sais pas si cette question est trop idiote mais je n'ai pas trouvé de moyen de le faire.

Habituellement, pour mettre un tableau en boucle, je le fais

current_humans = [.....]
current_humans.each do |characteristic|
  puts characteristic
end

Cependant, si j'ai ceci:

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

Ça ne marche pas.

Bien sûr, je peux utiliser quelque chose comme ça

puts Human.current_humans.inspect

mais je veux apprendre d'autres alternatives!

25
Manza

Vous pouvez utiliser la méthode p. L'utilisation de p est en fait équivalente à l'utilisation de puts + inspect sur un objet.

humans = %w( foo bar baz )

p humans
# => ["foo", "bar", "baz"]

puts humans.inspect
# => ["foo", "bar", "baz"]

Mais gardez à l'esprit que p est plus un outil de débogage, il ne doit pas être utilisé pour imprimer des enregistrements dans le flux de travail normal.

Il y a aussi pp (jolie impression), mais vous devez d'abord l'exiger.

require 'pp'

pp %w( foo bar baz )

pp fonctionne mieux avec des objets complexes.


En remarque, n'utilisez pas de retour explicite

def self.print  
  return @@current_humans.to_s    
end

devrait être

def self.print  
  @@current_humans.to_s    
end

Et utilisez l'indentation à 2 caractères, pas 4.

49
Simone Carletti