首页 文章

CoffeeScript中的三元操作

提问于
浏览
298

我需要将值设置为 a ,这取决于条件 .

使用CoffeeScript执行此操作的最短方法是什么?

例如 . 这是我在JavaScript中的方式:

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10

7 回答

  • 66

    因为一切都是表达式,因此产生一个值,所以你可以使用 if/else .

    a = if true then 5 else 10
    a = if false then 5 else 10
    

    您可以看到有关表达式示例here的更多信息 .

  • 0
    a = if true then 5 else 10
    a = if false then 5 else 10
    

    documentation .

  • 22

    在几乎任何语言中,这应该起作用:

    a = true  && 5 || 10
    a = false && 5 || 10
    
  • 3

    Coffeescript doesn't support javascript三元运算符 . 这是 coffeescript author 的原因:

    我喜欢三元运算符和下一个运算符(实际上可能更多一点),但语法并不能使它们变得更好 - 它们非常棒,因为它们可以在一行上匹配if / else一种表达 . 他们的语法只是记忆中另一种神秘的魔法,与语言中的任何其他东西都不相似 . 结果是平等的,我宁愿将if / elses看起来总是一样(并且总是被编译成表达式) . 因此,在CoffeeScript中,即使是多行ifs也会在适当时编译为三元组,if if语句也会在没有else子句的情况下编译:if sunny
    出去()
    其他
    读一本书() .

    如果晴天则go_outside()否则read_a_book()
    两者都成为三元,都可以用作表达 . 它是一致的,没有新的语法可供学习 . 所以,谢谢你的建议,但我正在关闭这张票作为“wontfix” .

    请参考github问题:https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802

  • 11

    如果主要是真的使用,你也可以用两个语句写它:

    a = 5
    a = 10 if false
    

    如果您需要更多可能性,请使用switch语句:

    a = switch x
      when true then 5
      when false then 10
    

    使用布尔值可能超大但我发现它非常易读 .

  • 514

    多行版本(例如,如果您需要在每行后添加评论):

    a = if b # a depends on b
    then 5   # b is true 
    else 10  # b is false
    
  • 0

    CoffeeScript 没有三元运算符 . 这就是文档所说的 .

    您仍然可以使用类似的语法

    a = true then 5 else 10
    

    它更加清晰 .

相关问题