Syntax 为什么coffeescript在这里需要括号?

Syntax 为什么coffeescript在这里需要括号?,syntax,coffeescript,Syntax,Coffeescript,请看以下代码片段: 如果 回来 如果a是b 回来 如果a是b 回来 如果ab 回来 如果ab->c 回来 如果是b->c 回来 如果是b->c 回来 最后一个将无法编译,并且会产生误导性错误消息,如果出现这种情况,则会出现意外情况。 我希望它能产生与前两次相同的产出 为什么不允许返回?在上一个示例中,返回是函数的一部分还是if语句的一部分存在歧义。如果它被解释为函数的一部分,那么这将是一个语法错误,因为If语句没有主体 if a (b) -> c return 可以按照您的预期进行解

请看以下代码片段:

如果 回来 如果a是b 回来 如果a是b 回来 如果ab 回来 如果ab->c 回来 如果是b->c 回来 如果是b->c 回来 最后一个将无法编译,并且会产生误导性错误消息,如果出现这种情况,则会出现意外情况。 我希望它能产生与前两次相同的产出


为什么不允许返回?

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

if a (b) -> c
  return
可以按照您的预期进行解释:

if (a (b) -> c)
  return
或者,返回的缩进被理解为匿名函数的延续:

if (a (b) -> c
  return)
在本例中,它给出了一个错误,因为if语句没有正文

if a (b) -> c
  return
我不确定,但我假设它选择将返回放置在函数内部,因为这是最接近的上下文,并且它没有被显式关闭(例如,使用括号)

另一种选择是,使用括号是足够安全的,因为它会因编译错误而失败,而不会给您带来难以调试的意外行为

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

return if a (b) -> c
或者先执行函数,然后使用if语句中的结果使其更精确 冗长的:

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