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

Clo*_*boy 53 coffeescript

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

while x()
   y()
Run Code Online (Sandbox Code Playgroud)

但是,以下1不起作用:

do
  y()
while x()
Run Code Online (Sandbox Code Playgroud)

对于第一个例子,这只是糖:

y() while x()
Run Code Online (Sandbox Code Playgroud)

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

1另外,do 一个关键字 - 它用于调用匿名函数.

Ale*_*ban 68

CoffeeScript文档说:

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

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

loop
  y()
  break if x()
Run Code Online (Sandbox Code Playgroud)

  • 注意,这模拟了`do`-`until`; 你需要`break除非'为'do`-`while`. (25认同)

adr*_*lin 24

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

要在CoffeeScript中构造一个do ... while循环等效,我认为这种语法可以模拟它最好,最简单,并且非常易读:

while true
   # actions here
   break unless # conditions here
Run Code Online (Sandbox Code Playgroud)

  • `while true`可以写成`loop`(并且更具描述性:你构建一个循环,并且只要`true`它就不会继续) (6认同)
  • @ 1j01回顾我同意`loop`在近两年后在语义上更好,但这是另一种选择,在用CoffeeScript编写我的JS几年之后,它仍然是我的首选方法,可能只是出于习惯. (2认同)

Tre*_*ham 16

你的猜测是正确的:do-whileCoffeeScript中没有相应的东西.所以你通常会写

y()
y() while x()
Run Code Online (Sandbox Code Playgroud)

如果您经常发现这种情况,可以定义辅助函数:

doWhile = (func, condition) ->
  func()
  func() while condition()
Run Code Online (Sandbox Code Playgroud)

  • 为什么这会超过循环; Y(); 除非x();`? (2认同)