Были ли `do... while` петли, оставшиеся без CoffeeScript...?
В CoffeeScript цикл while
поставляется стандартным:
while x()
y()
Однако следующий 1 не работает:
do
y()
while x()
И это просто сахар для первого примера:
y() while x()
Есть ли у CoffeeScript встроенный цикл, который выполняется хотя бы один раз?
1 В качестве альтернативы do
- это ключевое слово - оно используется для вызова анонимных функций.
Ответы
Ответ 1
В документации CoffeeScript говорится:
Единственный низкоуровневый цикл, который предоставляет CoffeeScript, - это цикл while.
Я не знаю о встроенном цикле, который выполняется хотя бы один раз, поэтому я предполагаю, что альтернатива
loop
y()
break if x()
Ответ 2
Я знаю, что этот ответ очень старый, но поскольку я вошел сюда через Google, я подумал, что кто-то еще может это сделать.
Чтобы построить do... while эквивалент цикла в CoffeeScript, я думаю, что этот синтаксис эмулирует его наилучшим и легким и очень читаемым:
while true
# actions here
break unless # conditions here
Ответ 3
Ваша догадка правильная: в CoffeeScript нет эквивалента do-while
. Поэтому вы обычно пишете
y()
y() while x()
Если вы часто это делаете, вы можете определить вспомогательную функцию:
doWhile = (func, condition) ->
func()
func() while condition()
Ответ 4
Я обнаружил, что это можно выполнить с помощью короткого замыкания:
flag = y() while not flag? or x()
Ответ 5
Я работаю над проектом, в котором я просто заставляю условие оценивать в конце цикла, а затем заканчивать в начале.
# set the 'do' variable to pass the first time
do = true
while do
# run your intended code
x()
# evaluate condition at the end of
# the while code block
do = condition
# continue code
Это не очень элегантно, но это не позволяет вам определить новую функцию только для вашего блока кода и запускать его дважды. Как правило, существует способ кодирования инструкций do... while, но для тех случаев, когда вы не можете иметь простого решения.