8
votes

Juste pour le plaisir, comment puis-je écrire un programme Ruby qui imprime lentement un caractère stdout un personnage à la fois?

Je pensais que cela pourrait fonctionner xxx

Je m'attendais à voir "A b c d e f j" être imprimé un caractère à la fois avec 0,25 secondes entre chaque caractère. Mais plutôt la chaîne entière est imprimée à la fois.


0 commentaires

5 Réponses :


5
votes

Deux choses:

  1. Vous devez diviser cette chaîne en une matrice avant d'utiliser chacun code> dessus. LI>
  2. désactiver tampon de sortie . p>

    $stdout.sync = true
    "a b c d d e f g h i j k".split(" ").each {|c| putc c ; sleep 0.25}
    


2 commentaires

Vous n'avez pas besoin du paramètre à scinder (), car c'est la valeur par défaut. .split.ach fera.


@Mark, c'est cool! Je ne connais pas vraiment Ruby, je viens de répondre "pour le plaisir" mais j'étais une minute plus rapide que Erjiang: D



1
votes

Essayez: xxx

qui fonctionne comme avec RUBY 1.9.2, qui n'a pas besoin de stdout pour affleurer chaque écriture.

Si vous voulez l'intervaluage Espaces Supprimer % w et utilisez chaque_char au lieu de chacun .


0 commentaires

5
votes

Deux choses:

  1. Vous devez utiliser .ef.chagr à itérer sur les caractères. Dans Ruby 1.8, String.Chaque ira ligne-by-ligne. Dans Ruby 1.9, string.ach est obsolète.
  2. Vous devez affleurer manuellement $ stdout si vous voulez que les caractères apparaissent immédiatement. Sinon, ils ont tendance à être tamponnés de sorte que les personnages apparaissent tous à la fois à la fin.

    . xxx


0 commentaires

2
votes

Sortie des tampons de rubis et le rincera à la sortie standard après avoir atteint une certaine taille. Vous pouvez le forcer à rincer à affleurer.

slowly do
  "a b c d e f g h i j k"
end


0 commentaires

0
votes

C'est ma façon de "impression lente": xxx


0 commentaires