【问题标题】:Why does coffeescript require parentheses here?为什么咖啡脚本在这里需要括号?
【发布时间】:2020-01-27 16:47:22
【问题描述】:

看下面的sn-ps:

if a
  return

if a b
  return

if (a b)
  return

if a(b)
  return

if a((b) -> c)
  return

if (a (b) -> c)
  return

if a (b) -> c
  return

最后一个不会编译,它会产生一个误导性的错误消息,unexpected if。 我希望它产生与前两个相同的输出。

为什么不允许?

【问题讨论】:

    标签: syntax coffeescript


    【解决方案1】:

    在最后一个示例中,返回是函数的一部分还是 if 语句的一部分存在歧义。如果它被解释为函数的一部分,那么这将是一个语法错误,因为没有 if 语句的主体。

    if a (b) -> c
      return
    

    可以按照你的预期解释:

    if (a (b) -> c)
      return
    

    或者return的缩进理解为匿名函数的延续:

    if (a (b) -> c
      return)
    

    在这种情况下,它给出了一个错误,因为 if 语句没有正文。

    我不确定,但我认为它选择将 return 放在函数内,因为这是最接近的上下文,并且它没有被明确关闭(例如,带括号)。

    作为替代方案,使用括号是足够安全的,因为它会因编译错误而失败,而不是给您带来难以调试的意外行为。

    如果您所做的只是在 if 语句中使用returning,则可以使用尾随 if:

    return if a (b) -> c
    

    或者先执行函数,然后在if语句中使用结果使其更 详细:

    isValid = a (b) -> c
    return if isValid
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-08
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2012-05-09
      相关资源
      最近更新 更多