Làm cách nào tôi có thể sử dụng các ứng dụng khác đặt vào hệ thống điều khiển mà không bị đứt dòng ruby ​​trên đường ray?


156

Tôi có một phương thức đi qua một vòng lặp - tôi muốn nó xuất ra một dấu "." mỗi vòng lặp để tôi có thể nhìn thấy nó trong giao diện điều khiển. tuy nhiên, nó đặt dấu ngắt dòng ở cuối mỗi khi tôi sử dụng puts ".".

Nếu có cách nào để nó chỉ có một đường liên tục?

Câu trả lời:


199

Bạn cần sử dụng in thay vì đặt. Ngoài ra, nếu bạn muốn các chấm xuất hiện trơn tru, bạn cần phải xóa bộ đệm tiêu chuẩn sau mỗi lần in ...

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

100.times do
  print_and_flush "."
  sleep 1
end

Chỉnh sửa: Tôi chỉ xem xét lý do đằng sau tuôn ra để trả lời bình luận của @ rubyprince và nhận ra điều này có thể được làm sạch một chút bằng cách sử dụng $stdout.sync = true...

$stdout.sync = true

100.times do
  print "."
  sleep 1
end

3
$stdout.flushthực sự cần thiết không? .. Tôi đang sử dụng Ruby 1.8.7 và tôi đã làm mọi thứ chỉ với printvà tôi không gặp vấn đề gì ..
rubyprince

6
Nó hữu ích nếu bạn đang làm một cái gì đó như một thanh tiến trình. Khi bạn chỉ sử dụng một printmình, nó có thể xuất hiện trong các khối vì nó có thể được lưu trữ trong bộ đệm thay vì được viết ngay lập tức (tôi không biết chính xác tại sao). Nó có thể là hệ điều hành cụ thể, quá.
idlefingers

2
Tôi đã thử nó với @ stdout.flush ... có lợi ích gì khi sử dụng .sync = true không?
Timothy T.

Tôi nghĩ rằng thiết lập thiết bị xuất chuẩn synclà quá mức cần thiết để xuất một chuỗi. Sau đó, nếu ứng dụng của bạn xuất ra nhiều, nó sẽ chậm hơn.
akostadinov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.