Были ли циклы `do ... while` оставлены вне CoffeeScript ...? - PullRequest
52 голосов
/ 19 мая 2011

В CoffeeScript стандартная петля while:

while x()
   y()

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

do
  y()
while x()

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

y() while x()

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

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

Ответы [ 5 ]

67 голосов
/ 19 мая 2011

В документации CoffeeScript сказано:

Единственный низкоуровневый цикл, который обеспечивает CoffeeScript, - это цикл while.

Я не знаю встроенногоцикл, который выполняется хотя бы один раз, поэтому я думаю, что альтернатива -

loop
  y()
  break if x()
24 голосов
/ 20 июня 2013

Я знаю, что этот ответ очень старый, но так как я вошел сюда через Google, я подумал, что кто-то еще мог бы также.

Чтобы создать эквивалент цикла do ... while в CoffeeScript, я думаю, что этосинтаксис эмулирует его лучше и проще и очень читабелен:

while true
   # actions here
   break unless # conditions here
16 голосов
/ 19 мая 2011

Ваше предположение верно: в CoffeeScript нет эквивалента do-while.Таким образом, вы обычно пишете

y()
y() while x()

Если вы делаете это часто, вы можете определить вспомогательную функцию:

doWhile = (func, condition) ->
  func()
  func() while condition()
1 голос
/ 18 июля 2013

Я обнаружил, что это можно сделать с помощью условного короткого замыкания:

flag = y() while not flag? or x()
0 голосов
/ 27 февраля 2013

Я работал над проектом, в котором я просто вынуждаю условие выполнить оценку в конце цикла, а затем завершить в начале.

# 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

Это не очень элегантно, но не позволяет вам определить новую функцию только для вашего блока кода while и запустить его дважды. Как правило, существует способ кодирования операторов do ... while, но для тех случаев, когда вы не можете найти простое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...