【发布时间】:2015-01-28 07:21:44
【问题描述】:
比较 Go 和 Scala 的语句结束检测,发现 Scala 的规则更丰富,即:
行尾被视为分号,除非出现以下情况之一 条件为真:
- 有问题的行以一个作为语句结尾不合法的单词结尾,例如句点或中缀运算符。
- 下一行以一个不能启动语句的单词开头。
- 该行在括号 (...) 或方括号 [...] 内结束,因为它们不能包含多个语句。
引用自Scala - The rules of semicolon inference。
规则 #1 也是 Go 的工作方式。规则#3也是。唯一的区别是规则 #2 - 它涉及单次前瞻,因为涉及一个标记(“单词”)。
涉及什么样的性能损失:慢 1%、5%、10%?
我很想看到一条评论(不是问题)为什么 Go 设计者忽略了这条规则——如果不是为了性能,它会让语言更可靠,例如在方法链中:
x = some_object.select(...)
.sort(...)
.reverse(...)
.where(...)
.single()
如果我没有误认为 Go,那是一个错误(您可以通过两种可能的方式解决它——将整个语句放在大括号中或将表达式放在括号中,但它是手动调整的),Scala 会按照它应该的方式处理。
【问题讨论】: