【问题标题】:Coffee Script: if .. is .. then咖啡脚本:如果 .. 是 .. 那么
【发布时间】:2012-03-09 23:53:15
【问题描述】:

我正在用 Coffee Script 编写一个石头剪刀布游戏,但代码没有像我预期的那样编译。

咖啡脚本

if choice is opponent_choice then alert "Tie!"

编译为

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

但我期待

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

我需要更改哪些内容才能按照我预期的方式进行编译?

【问题讨论】:

  • 这两段代码是等价的。为什么你特别需要后者而不是前者?
  • 为什么要用coffee脚本作为源。如果您想对编译后的 javascript 进行如此严格的控制,为什么不直接编写 javascript?

标签: javascript compilation coffeescript


【解决方案1】:

如果一行只有一个语句,则不需要大括号。它们在功能上是相同的,coffeescript 编译器会优化输出以使用最少的字符。

【讨论】:

    【解决方案2】:

    为什么重要?

    要让 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 视为源代码,而不是编译后的输出。您不会梦想编辑其他语言的编译输出吧? (我知道这个类比有点牵强 - 但重点仍然存在,源用于读/写和编译输出用于执行)。

      【讨论】:

        【解决方案4】:
        // Generated by CoffeeScript 1.7.1
        

        我用的是这个版本的coffee,可以按照你期望的方式编译。

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

        你可以试试。但是,我建议您不要过多关注编译后的输出。没关系。

        【讨论】:

          猜你喜欢
          • 2013-01-09
          • 2013-09-08
          • 1970-01-01
          • 1970-01-01
          • 2011-11-08
          • 2011-06-30
          • 2013-06-10
          • 2012-08-26
          • 1970-01-01
          相关资源
          最近更新 更多