在CoffeeScript中,while
循环是标准的:
while x()
y()
但是,以下 1 不起作用:
do
y()
while x()
这只是第一个例子中的糖:
y() while x()
CoffeeScript是否附带至少执行一次的内置循环?
1 除此之外,do
是一个关键字 - 它用于调用匿名函数。
答案 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语句进行编码,但是在那些时候你不能有一个简单的解决方案。