为什么Coffeescript在这里需要括号?

查看以下片段:

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。 我希望它产生与前两个相同的输出。

为什么不允许?

yu8023fei 回答:为什么Coffeescript在这里需要括号?

在最后一个示例中,返回值是函数的一部分还是if语句的一部分是不明确的。如果将其解释为函数的一部分,则将是语法错误,因为if语句没有正文。

if a (b) -> c
  return

可以按预期解释:

if (a (b) -> c)
  return

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

if (a (b) -> c
  return)

在这种情况下,它会产生错误,因为if语句没有正文。

我不确定,但是我假设它选择将return放在函数中,因为这是最接近的上下文,并且尚未显式关闭(例如,带有括号)。

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

如果您只是在if语句中插入return,则可以使用尾随if:

return if a (b) -> c

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

isValid = a (b) -> c
return if isValid
本文链接:https://www.f2er.com/2716572.html

大家都在问