在比较 Go 和 Scala 语句结束检测时,我发现 Scala 的规则更丰富,即:
除非满足以下条件之一,否则行结尾将被视为分号:
有问题的行以作为语句结尾不合法的单词结尾,例如句点或中缀运算符。
下一行以不能作为语句开头的单词开始。
该行在括号 (...) 或方括号 [...] 内结束,因为它们无论如何都不能包含多个语句。
规则#1 也是 Go 的工作原理。规则#3也是。唯一的区别是规则#2——它涉及单个前瞻,因为涉及一个标记(“单词”)。
涉及什么样的性能损失:慢 1%、5%、10%?
我很想看到一个评论(不是问题)为什么 Go 设计师遗漏了这条规则——如果不是为了性能,它会使语言更可靠,例如在方法链中:
x = some_object.select(...) .sort(...) .reverse(...) .where(...) .single()
如果我没有误认为 Go 是一个错误(您可以通过两种可能的方式解决它——将整个语句放在大括号中或将表达式放在括号中,但它是手动调整的),Scala 会照常处理。
BIG阳
相关分类