Como posso usar "puts" no console sem quebras de linha em ruby ​​nos trilhos?

156

Eu tenho um método que passa por um loop - eu quero que ele produza um "." cada loop para que eu possa vê-lo no console. no entanto, coloca uma quebra de linha no final de cada um quando uso puts ".".

Se existe uma maneira de apenas ter uma linha contínua?

Timothy T.
fonte

Respostas:

199

Você precisa usar print em vez de put. Além disso, se você deseja que os pontos apareçam sem problemas, é necessário liberar o buffer stdout após cada impressão ...

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

100.times do
  print_and_flush "."
  sleep 1
end

Edit: Eu estava apenas olhando para o raciocínio por trás do flush para responder ao comentário de @ rubyprince, e percebi que isso poderia ser limpo um pouco simplesmente usando $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end
idlefingers
fonte
3
É $stdout.flushrealmente necessário? .. Estou usando o Ruby 1.8.7 e já fiz as coisas apenas printe não tive problemas .. #
rubyprince
6
É útil se você estiver fazendo algo como uma barra de progresso. Quando você usa printsozinho, ele pode sair em blocos porque pode ser armazenado no buffer em vez de ser gravado imediatamente (não sei exatamente por que). Também pode ser específico do sistema operacional.
Idlefingers
2
Eu tentei com @ stdout.flush ... algum benefício em usar .sync = true?
Timothy T.
Eu acho que definir stdout syncé um exagero para gerar uma string. Então, se você aplicar muito, será mais lento.
Akostadinov 11/05