web-dev-qa-db-ja.com

CoffeeScriptから「do ... while」ループが残っていましたか...?

CoffeeScriptでは、whileループが標準装備されています。

while x()
   y()

ただし、次の1 動作しません:

do
  y()
while x()

そして、これは最初の例の単なる砂糖です:

y() while x()

CoffeeScriptには、少なくとも1回実行される組み込みループが付属していますか?

1余談ですが、doisキーワード—匿名関数を呼び出すために使用されます。

52
ClosureCowboy

CoffeeScriptのドキュメントには次のように書かれています:

CoffeeScriptが提供する唯一の低レベルループは、whileループです。

少なくとも1回実行される組み込みループがわからないので、代替手段は

loop
  y()
  break if x()
67
Alex Korban

私はこの答えが非常に古いことを知っていますが、Google経由でここに入ったので、他の誰かも同じように思った。

CoffeeScriptで同等のdo ... whileループを構築するには、この構文が最良かつ最も簡単で、非常に読みやすいとエミュレートすると思います。

while true
   # actions here
   break unless # conditions here
24
adrenalin

あなたの推測は正しい:CoffeeScriptにはdo-whileに相当するものはありません。だからあなたは通常書くだろう

y()
y() while x()

これを頻繁に行うことに気付いた場合は、ヘルパー関数を定義できます。

doWhile = (func, condition) ->
  func()
  func() while condition()
16
Trevor Burnham

私はこれが短絡条件付きで達成できることを発見しました:

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

ループの最後に条件を強制的に評価し、最初に終了するプロジェクトに取り組んでいます。

# 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コードブロックのためだけに新しい関数を定義して、それを2回実行することはできません。一般にdo ... whileステートメントをコード化する方法がありますが、その間は簡単な解決策はありません。

0
benja2729