ฉันมีวิธีที่ผ่านการวนรอบ - ฉันต้องการให้ส่งออก "." แต่ละวงดังนั้นฉันสามารถดูได้ในคอนโซล แต่มันทำให้ LINEBREAK puts "."
ในตอนท้ายของแต่ละเมื่อฉันใช้
หากมีวิธีการที่จะมีเพียงเส้นต่อเนื่อง?
ฉันมีวิธีที่ผ่านการวนรอบ - ฉันต้องการให้ส่งออก "." แต่ละวงดังนั้นฉันสามารถดูได้ในคอนโซล แต่มันทำให้ LINEBREAK puts "."
ในตอนท้ายของแต่ละเมื่อฉันใช้
หากมีวิธีการที่จะมีเพียงเส้นต่อเนื่อง?
คำตอบ:
คุณต้องใช้การพิมพ์แทนการใส่ นอกจากนี้หากคุณต้องการให้จุดปรากฏอย่างราบรื่นคุณต้องล้างบัฟเฟอร์ stdout หลังการพิมพ์แต่ละครั้ง ...
def print_and_flush(str)
print str
$stdout.flush
end
100.times do
print_and_flush "."
sleep 1
end
แก้ไข:ฉันแค่มองหาเหตุผลที่อยู่เบื้องหลัง flush เพื่อตอบความคิดเห็นของ @ rubyprince และตระหนักว่าสิ่งนี้สามารถทำความสะอาดได้เพียงแค่ใช้$stdout.sync = true
...
$stdout.sync = true
100.times do
print "."
sleep 1
end
print
มันสามารถออกมาเป็นบล็อคได้เพราะมันสามารถเก็บไว้ในบัฟเฟอร์แทนที่จะเขียนทันที (ฉันไม่รู้ว่าทำไม) มันอาจเป็นระบบปฏิบัติการที่เฉพาะเจาะจงเช่นกัน
sync
เป็น overkill เพื่อส่งออกหนึ่งสาย จากนั้นหากคุณแอพส่งออกมากมันจะช้าลง
$stdout.flush
? จำเป็นจริงๆ .. ฉันใช้ทับทิม 1.8.7 และฉันได้ทำสิ่งที่เพิ่งมีprint
และผมไม่มีปัญหา ..