Comment puis-je utiliser des «put» sur la console sans rupture de ligne en rubis sur rails?

156

J'ai une méthode qui passe par une boucle - je veux qu'elle génère un "." chaque boucle pour que je puisse le voir dans la console. cependant, il met un saut de ligne à la fin de chacun lorsque j'utilise puts ".".

S'il y a un moyen pour qu'il ait juste une ligne continue?

Timothy T.
la source

Réponses:

199

Vous devez utiliser print au lieu de put. De plus, si vous voulez que les points apparaissent correctement, vous devez vider le tampon de sortie standard après chaque impression ...

def print_and_flush(str)
  print str
  $stdout.flush
end

100.times do
  print_and_flush "."
  sleep 1
end

Edit: Je regardais juste le raisonnement derrière flush pour répondre au commentaire de @ rubyprince, et j'ai réalisé que cela pouvait être nettoyé un peu en utilisant simplement $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end
idlefingers
la source
3
Est-ce $stdout.flushvraiment nécessaire? .. J'utilise Ruby 1.8.7 et j'ai fait des choses juste avec printet je n'ai eu aucun problème ..
rubyprince
6
C'est utile si vous faites quelque chose comme une barre de progression. Lorsque vous l'utilisez tout printseul, il peut sortir par blocs car il peut être stocké dans le tampon au lieu d'être écrit tout de suite (je ne sais pas exactement pourquoi). Cela peut aussi être spécifique au système d'exploitation.
idlefingers
2
Je l'ai essayé avec @ stdout.flush ... des avantages à utiliser .sync = true à la place?
Timothy T.
Je pense que définir stdout sur syncest une overkill pour produire une chaîne. Ensuite, si votre application produit beaucoup, ce sera plus lent.
akostadinov