查看以下片段:
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
。
我希望它产生与前两个相同的输出。
为什么不允许?
查看以下片段:
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
。
我希望它产生与前两个相同的输出。
为什么不允许?
在最后一个示例中,返回值是函数的一部分还是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