从咖啡脚中留下`do ... while`循环......?

时间:2011-05-19 01:49:50

标签: coffeescript

在CoffeeScript中,while循环是标准的:

while x()
   y()

但是,以下 1 不起作用:

do
  y()
while x()

这只是第一个例子中的糖:

y() while x()

CoffeeScript是否附带至少执行一次的内置循环?

1 除此之外,do 一个关键字 - 它用于调用匿名函数。

5 个答案:

答案 0 :(得分:66)

CoffeeScript文档说:

  

CoffeeScript提供的唯一低级循环是while循环。

我不知道至少执行一次的内置循环,所以我猜替代方案是

loop
  y()
  break if x()

答案 1 :(得分:24)

我知道这个答案已经很老了,但是自从我通过Google进入这里后,我认为其他人也可能会这么做。

要在CoffeeScript中构造一个do ... while循环等价物,我认为这种语法模仿它是最好最简单的,并且非常易读:

while true
   # actions here
   break unless # conditions here

答案 2 :(得分:16)

您的猜测是正确的:CoffeeScript中没有do-while等效项。所以你通常会写

y()
y() while x()

如果您经常这样做,您可以定义辅助函数:

doWhile = (func, condition) ->
  func()
  func() while condition()

答案 3 :(得分:1)

我发现这可以通过有条件的短路来实现:

flag = y() while not flag? or x()

答案 4 :(得分:0)

我一直致力于一个项目,我只是强制条件在循环结束时进行评估,然后在开始时终止。

# 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语句进行编码,但是在那些时候你不能有一个简单的解决方案。