2015-08-07 3 views
-5

Я пытаюсь использовать loop для печати "¡Ruby!" 30 раз. Это можно легко сделать с помощью 30.times{print "¡Ruby!"} или с помощью while, но, поскольку я учусь, я хотел бы сделать это с помощью loop. Вот мой код:Как закодировать строку без `times` в Ruby

word = "¡Ruby!" 
loop do print word * 30 
break if word.count < 30 
end 

После печати в 30 раз, как я хотел, я получаю эту ошибку:

"wrong number of arguments (at least 1)", "invalid multibyte char (UTF-8) (SyntaxError)" and "syntax error, unexpected tFID, expecting end-of-input word = "�Ruby!"" 

спасибо.

+2

Есть ли конкретная причина, по которой вы хотели бы избежать идиоматического рубина? Есть более простые решения, далекие, например, ответы @ DMKE. ИЛИ 'loop {print 'Ruby' * 30; raise StopIteration}' если нужно. – engineersmnky

+0

Я просто хочу, чтобы вы, ребята и я, решили сделать это по-другому, используя: ** loop **, как @nextstep, спасибо за ваше время! –

+1

@engineersmnky: Ооо, это зло. Мне это нравится! :-D –

ответ

1
i = 0 

loop do 
    print "¡Ruby!" 
    i += 1 
    break if i > 29 
end 

Это будет print вне вашей строки 30 раз.

=> ¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby!¡Ruby! 

Для немного более разборчивых изменений print выхода на puts

+0

круто, однако вызов с петлей не во время! –

+0

отредактирован для использования 'loop' – nextstep

+0

, это верно, спасибо! –

0

String#* ваш друг:

print "¡Ruby!" * 30 
+0

Хотя это не отвечает ограничениям вопроса. это лучшее решение проблемы и является самым идиоматичным. – engineersmnky

+1

OP специально запросил использование 'loop' (бесконечный цикл в Ruby). –

1
enum = 10.times 
loop { enum.next; puts "What, ho!" } 
What, ho! 
What, ho! 
What, ho! 
What, ho! 
What, ho! 
What, ho! 
What, ho! 
What, ho! 
What, ho! 
What, ho! 

Enumerator#next поднимает StopIteration исключения, когда переписчик находится на последний элемент. Kernel#loop обрабатывает исключение, вырываясь из цикла.

+0

Хороший совет, спасибо @Cary Swoveland –