2012-03-09 135 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); 

您可以试试。不过,我建议你不要太注意编译输出。没关系。