高优先级应用程序表达式是其中标识符紧跟左侧paren而没有插入空格的表达式,例如f(g)
。将这些作为函数参数传递时需要括号:func (f(g))
。
Section 15.2 of the spec表示语法和优先规则允许使用不加括号的表单 - func f(g)
- 但是额外的检查可以防止这种情况发生。
为什么这是故意禁止的?它可以避免需要过多的括号和管道,并且通常使代码更清晰。
一个常见的例子是
raise <| IndexOutOfRangeException()
或
raise (IndexOutOfRangeException())
可能变得简单
raise IndexOutOfRangeException()
答案 0 :(得分:2)
我同意编写额外括号的需要有点烦人。我认为不允许省略它们的主要原因是添加空格会以相当重要的方式改变代码的含义:
// Call 'foo' with the result of 'bar()' as an argument
foo bar()
// Call 'foo' with 'bar' as the first argument and '()' as the second
foo bar ()
还有一些粗略的边缘,其中添加parens会更改评估(请参阅此form post),但“只是”会更改评估顺序。这会改变你的代码的含义!