2011-09-26 56 views
3

高优先级应用程序表达式是一种标识符紧接着左括号而不介入空白的标识符,例如f(g)。将这些作为函数参数传递时,需要括号:func (f(g))高优先级应用程序表达式作为参数

Section 15.2 of the spec声明语法和优先级规则允许非隐含格式 - func f(g) - 但是额外的检查可以防止这种情况。

为什么这是故意禁止的?它可以避免使用过多的括号和管道,并且通常会使代码更清洁。

一个常见的例子是

raise <| IndexOutOfRangeException() 

raise (IndexOutOfRangeException()) 

可能成为简单

raise IndexOutOfRangeException() 

回答

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() 

仍然有一些粗糙的边缘,其中加入括号变化评估(见form post),但这个“正好”改变了评估顺序。这会改变你的代码的意义!

+0

在空白非常重要的语言中,这似乎不是问题。 :-) – Daniel

+0

这看起来像一个有趣的线程。谢谢。 – Daniel

+0

@丹尼尔 - 我想这是一个选择问题,空白应该在多大程度上显着。进一步说,我们还可以使用双空格表示法为'goo(foo 1)(bar 2)'写'goo foo 1 bar 2' :-)。 (编辑:这将使发布到SO评论困难,因为双空间在这里忽略...) –