2012-03-09 112 views
1

我正在用咖啡腳本編寫一個岩石紙剪刀遊戲,代碼不像我期望的那樣編譯。咖啡腳本:if .. is ..

的CoffeeScript

if choice is opponent_choice then alert "Tie!" 

編譯成

if (choice === opponent_choice) alert("Tie!"); 

但我期待

if (choice === opponent_choice) { 
alert("Tie!"); 
} 

我需要做什麼來改變這個在我的預期方式編譯?

+4

這兩位代碼是等價的。你爲什麼特別需要後者而不是前者? – ruakh 2012-03-09 23:54:48

+7

爲什麼使用咖啡腳本作爲源。如果你想對編譯後的javascript進行更多的關閉控制,爲什麼不直接寫javascript呢? – 2012-03-09 23:57:07

回答

16

如果一行上只有一條語句,則不需要大括號。它們在功能上是相同的,並且coffeescript編譯器優化輸出以使用最少量的字符。

4

爲什麼這很重要?

對於CS創建塊/多線then實際上你需要有一個多線then,如:

if choice is opponent_choice 
    alert "Tie!" 
    alert "Foo" 

哪個編譯爲:

if (choice === opponent_choice) { 
    alert("Tie!"); 
    alert("Foo"); 
} 
3

改變你的期望,而不是輸出。


編輯:添加一些細節

的CoffeeScript是一個很好的工具,不僅編寫代碼較短的方式(這是),但它重新格式許多普通模式到良好的JavaScript。輸出的內容通常比你在javascript中編寫的內容可讀性差,但它在清晰度上損失的很少,它在編程模式上有所改進。

您應該將CoffeeScript作爲源代碼,而不是編譯後的輸出。你不會夢想編輯其他語言的編譯輸出嗎? (我知道這個比喻有一點點延伸 - 但問題仍然存在,源代碼是讀/寫和編譯輸出以執行)。

0
// Generated by CoffeeScript 1.7.1 

我使用這個版本的咖啡,並可以按照預期的方式進行編譯。

(function() { 
    if (choice === opponent_choice) { 
    alert("Tie!"); 
    } 

}).call(this); 

您可以試試。不過,我建議你不要太注意編譯輸出。沒關係。