Подтвердить что ты не робот

Были ли `do... while` петли, оставшиеся без CoffeeScript...?

В CoffeeScript цикл while поставляется стандартным:

while x()
   y()

Однако следующий 1 не работает:

do
  y()
while x()

И это просто сахар для первого примера:

y() while x()

Есть ли у CoffeeScript встроенный цикл, который выполняется хотя бы один раз?

1 В качестве альтернативы do - это ключевое слово - оно используется для вызова анонимных функций.

4b9b3361

Ответ 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, но для тех случаев, когда вы не можете иметь простого решения.