2015-07-13 2 views
0

Привет, как я могу сделать загрузку три точки (...), так что он делает что-то вроде этого, за исключением без новой строки каждый раз:Создать погрузочной три маленькие точки

Загрузка

Загрузка.

Loading ...

Loading ..

Загрузка.

и так далее:

Это то, что я придумал, только проблема в том, что я не могу удалить многоточие один за другим, если загрузка продолжается в течение более чем 1,5 секунды.

puts "Sending" 
sleep(0.5) 
print "." 
sleep(0.5) 
print "." 
sleep(0.5) 
print "." 

Надеюсь, я достаточно ясен.

Благодарим за помощь.

+2

Посмотрите на escape-последовательность '' \ r "'. Он помещает курсор в начало текущей строки, поэтому вы можете записать его. –

+2

Комбинат @ Совет Сергио Туленцева с оператором modulo (%), который получает остаток. – citelao

ответ

3
10.times do |i| 
    print "Sending." + ("." * (i % 3)) + " \r"  
    $stdout.flush 
    sleep(0.5) 
end 

Итак, как же это работает?

10.times do |i| 

Повторите следующий код 10 раз, с переменной i с указанием текущей итерации (0, 1, 2, 3, 4 ...)

print "Sending." + ("." * (i % 3)) + " \r" 

печати фраза "Посылка". затем несколько вещей:

  • ("." * (i % 3)) повторы («умножает») строку "." несколько раз, в частности, i % 3, который является остатком i, когда он делится на 3. Таким образом, когда i 7, i % 3 является 1 .
  • "\r" перемещает курсор обратно в начало строки без делает новую строку. Если вы думаете о пишущей машинке, это похоже на возвращение каретки (бит, который соответствует типу) в начало строки, чтобы вы могли снова ввести ту же строку. Это возврат каретки.

    $stdout.flush 
    

Убедитесь, что печать данных.

sleep(0.5) 

Сон на полсекунды.

+0

Отлично работает и делает именно то, что я хочу. Однако я не совсем понимаю, как работает код. Не могли бы вы объяснить это мне? Спасибо. – Pabi

+0

Я добавил объяснение. Помогает ли это? – citelao

2

Вы можете попробовать с $stdout.flush:

def loading number_of 
    number_of.times do |t| 
    print "Sending#{'.' * (t % 4)} \r" 
    $stdout.flush 
    sleep 0.5 
    end 
end 

Demonstration

+0

Отсутствует часть с «удалением точек». repl.it приятно. –

+0

@undur_gongor: спасибо, но в этом случае он выглядит бесполезным. – potashin

Смежные вопросы