【问题标题】:coffee script switch without break咖啡脚本切换不间断
【发布时间】:2012-05-17 03:23:31
【问题描述】:

是否可以在coffeescript中使用switch而不中断?

switch code                      switch (code) {
    when 37 then                     case 37: break;
    when 38 then           ->        case 38: break;
    when 39 then                     case 39: break;
    when 40                          case 40:
        ...                              ...

我认为这会起作用,但失败了:

switch code
    when 37 then continue
    when 38 then continue  ->    not valid
    when 39 then continue
    when 40
        ...

【问题讨论】:

  • 你不想喝杯咖啡吗? (抱歉无法抗拒)
  • AFAIK,没有。也许更详细地说明您正在尝试做的事情会帮助我们找到合适的替代方案。
  • 我完全确定带有硬编码中断的开关是不好的。我现在将检查咖啡编译器的源代码
  • 我想这是为了防止跌倒。
  • Fall-through in C 风格的 switch/case 长期以来一直被大多数人认为是一种反模式,当breaks 被遗忘时会导致很多错误。如果你能告诉我们为什么你认为你的情况需要失败,我相信有人会用 CoffeeScript 风格告诉你如何做到这一点。

标签: javascript coffeescript


【解决方案1】:

不是真的。来自the docs

JavaScript 中的 Switch 语句有点笨拙。您需要记住在每个 case 语句的末尾都打断,以避免意外陷入默认情况。 CoffeeScript 可以防止意外掉线,并且可以将开关转换为可返回、可赋值的表达式。格式为:switch条件,when子句,else默认情况。

不过,如果要平等对待它们,您可以在 case 中指定多个值:

switch day
  when "Mon" then go work
  when "Tue" then go relax
  when "Thu" then go iceFishing
  when "Fri", "Sat"
    if day is bingoDay
      go bingo
      go dancing
  when "Sun" then go church
  else go work

【讨论】:

  • 当“去工作”和“去放松”和“去冰钓”和“去教堂”是相同的代码:这是不好的方式
  • 我不是在评论这是好是坏——你问了一个关于 CoffeeScript 的问题,这就是 CoffeeScript 的作者的想法。他并不是唯一一个认为 C 风格的 switch-statements 不好的人。也就是说,when "Mon", "Tue", "Thu", "Sun" 有什么不好呢?
  • Javascript 中的 switch 语句与其他任何地方都相同:在所有语言中(据我所知),如果您不想下一个,则必须在案例结束时中断评估。我想这是故意控制它的。
  • @ciastek 谢谢你是对的。但我的主要观点是“break”很有用。
【解决方案2】:

完全有可能,只需使用经典的 javascript 并通过 backtics 传递它

`
switch (code) {
    case 37:
    case 38:
    case 39:
    case 40:
        // do the work of all four
    default:
        //default
}
`

【讨论】:

    【解决方案3】:

    您可以使用续行来帮助解决此问题。例如:

    name = 'Jill'
    
    switch name
      when 'Jill', \
           'Joan', \
           'Jess', \
           'Jean'
        $('#display').text 'Hi!'
      else
        $('#display').text 'Bye!'
    

    Check it out in action here.

    【讨论】:

    • 似乎解析器失败了,应该自动允许以 a 结尾的行继续,还是我在投影? (评论代码中的 \ 延续)
    【解决方案4】:

    已经是老问题了,但如果你把逗号放在下一行,它会按预期工作,没有@Ron Martinez 显示的反斜杠继续

    switch code
      when 37
         , 38
         , 39
         , 40
        console.log "Some Number"
      else
        console.log "Default"
    

    将编译为:

    switch (code) {
      case 37:
      case 38:
      case 39:
      case 40:
        return console.log("Some Number");
      default:
        return console.log("Default");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多