【问题标题】:Coffeescript equivalent of python 'pass' statementCoffeescript 相当于 python 'pass' 语句
【发布时间】:2013-01-29 05:50:17
【问题描述】:

在 Python 中,可以使用“pass”语句什么都不做:

if true:
    pass

coffeescript中是否有类似的说法? 我正在尝试执行 switch 语句,如果满足某些条件,则什么也不做。

switch variable:
  when 5 then pass
  else do variable

【问题讨论】:

    标签: syntax coffeescript


    【解决方案1】:

    我是一个快乐的用户

    switch x
      when 1
       null
      when 2
       y = 3
      else
       y = 4
    

    因为null 已经在语言中,并且确实在语义上传输了“无”的含义。

    【讨论】:

    • 这是我最喜欢的答案,但我想知道使用; 是否会比null 更有效(一点点)?
    【解决方案2】:

    与 Python 不同,空块(通常)在 CoffeeScript 中有效。所以你可以简单地使用:

    switch variable:
      when 5 then
      else
        variable
    

    请注意,如果没有then,它将无法编译,我觉得这有点奇怪。不过,这很普遍:

    if x
    else if y
      something()
    else
      somethingElse()
    

    是完全有效的 CoffeeScript。

    【讨论】:

      【解决方案3】:

      因为在 CoffeeScript 中每个表达式都有一个值,所以一个 pass 关键字,如果它存在的话,将等价于值 undefined。所以,你可以定义

      pass = undefined
      

      然后像在 Python 中一样使用pass

      switch variable
         when 5
           pass
         else
           do variable
      

      【讨论】:

        【解决方案4】:

        我总是为此使用分号:

        switch variable
          when 5 then ;
          else do variable
        

        这是因为在 javascript 中,分号是一个有效的语句,它也恰好什么也不做。

        更新:我刚刚想到了另一种有趣的方法。您可以将pass 定义为全局变量并将其设置为undefined

        window.pass = undefined
        
        switch variable
          when 5 then pass
          else do variable
        

        您唯一需要注意的是使用pass 作为局部变量或重新定义全局pass 变量。那会破坏你的代码。

        如果你使用谷歌的闭包编译器,你可以注释这个变量,使它成为一个常量:

        `/** @const */ var pass;`
        

        但是它必须放在每个文件的开头。不过,您可以编写自己的预处理器来自动执行此操作。

        【讨论】:

          【解决方案5】:

          这在咖啡脚本中对我来说很有意义:

          switch variable
              when "a" then doSomething()
              when "b" then break
          

          这样编译成下面的js:

          switch (variable) {
              case "a":
                  doSomething();
                  break;
              case "b":
                  break;
          }
          

          注意:你不应该像@flow 建议的那样使用 null,因为它会插入一个像这样的不必要的语句

          null;
          

          【讨论】:

          • 这适用于 switch 语句,但不能完全填充 pass,因为它不能用于 if/else 之类的 pass can。
          猜你喜欢
          • 2014-01-18
          • 2013-12-21
          • 2017-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多