20

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

if true:
    pass

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

switch variable:
  when 5 then pass
  else do variable
4

5 回答 5

19

我是一个快乐的用户

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

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

于 2013-02-14T14:38:24.250 回答
17

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

switch variable:
  when 5 then
  else
    variable

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

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

是完全有效的 CoffeeScript。

于 2013-02-13T16:41:44.757 回答
8

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

pass = undefined

然后pass像在 Python 中一样使用:

switch variable
   when 5
     pass
   else
     do variable
于 2013-02-13T16:37:27.847 回答
6

我总是为此使用分号:

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;`

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

于 2013-02-13T16:07:27.660 回答
1

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

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

这编译为以下js:

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

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

null;
于 2013-07-23T12:56:32.663 回答