2011-09-26 55 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評論困難,因爲雙空間在這裏忽略...) –