在CoffeeScript中,該while
循環標配:是否有``... while``循環被忽略掉了CoffeeScript ...?
while x()
y()
但是,下面的不起作用:
do
y()
while x()
而這僅僅是糖的第一個例子:
y() while x()
CoffeeScript是否帶有至少執行一次的內置循環?
順便說一句,do
是一個關鍵字 - 它用來調用匿名函數。
在CoffeeScript中,該while
循環標配:是否有``... while``循環被忽略掉了CoffeeScript ...?
while x()
y()
但是,下面的不起作用:
do
y()
while x()
而這僅僅是糖的第一個例子:
y() while x()
CoffeeScript是否帶有至少執行一次的內置循環?
順便說一句,do
是一個關鍵字 - 它用來調用匿名函數。
的CoffeeScript的文件說:
唯一的低級別的循環,CoffeeScript的提供是while循環。
我不知道一個內置的循環執行至少一次,所以我想選擇是
loop
y()
break if x()
+1這就是我所害怕的。一個快速的網絡搜索揭示了幾個博客提到CoffeeScript支持「do-while」循環,但這些博客肯定是錯誤的。 – ClosureCowboy 2011-05-19 02:48:16
請注意,這模擬'do'-'until';你需要'休息',除非'做' - '時間'。 – matyr 2011-09-17 01:37:01
[鏈接到循環文檔](http://coffeescript.org/#loops) – reergymerej 2015-11-03 04:50:52
你的猜測是正確的:沒有do-while
相當於CoffeeScript的。所以你通常書寫
y()
y() while x()
如果你發現自己經常這樣做,你可以定義一個輔助函數:
doWhile = (func, condition) ->
func()
func() while condition()
爲什麼在'循環; Y();除非x();'? – Soumya 2014-06-28 03:45:06
好問題。我還沒有看到「循環」在野外非常常用,但這是它最明智的用例。 – 2014-07-01 16:22:29
我一直工作在一個項目中,我只是迫使條件在循環結束時評估,然後在開始處終止。
# 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
這不是很優雅,但它確實讓你無法爲你的代碼塊定義一個新函數並運行它兩次。通常有一種方法可以對do ... while語句進行編碼,但在那段時間你不能有一個簡單的解決方案。
'do'是CoffeeScript中的保留字。這會讓讀者感到困惑。 – Mitar 2013-04-03 04:09:38
我知道這個答案非常古老,但是由於我是通過Google進入這裏的,所以我認爲別人可能也會這樣。
構建一個do ... while循環相當於在CoffeeScript中,我認爲這句法模擬它的最好和最簡單的和非常易讀:
while true
# actions here
break unless # conditions here
我發現這可以通過短路條件完成:
flag = y() while not flag? or x()
OT,但我喜歡'coffeescript'標籤的描述。 :) – 2011-05-19 01:54:01
人們應該問自己,一個給定的構造是否是非常可取的。 'while'和'do ... while'之間的重要區別在於循環體被執行一次,因爲條件僅在循環體執行後被檢查。在CS中,你可以使用'do ... break if ...'或'do ... break'輕鬆地做到這一點,除非......'結構清晰地讀取&*更靈活*因爲'break'可以出現在循環體的任何一行上。這也適用於類似的構造,如帕斯卡的「重複......直到」。 – flow 2013-06-20 13:35:42
@flow'do ... break if ...'招致IIFE懲罰 – 2015-07-21 16:56:48