我在讀this,現在想知道:F#中的評估順序是什麼?F#評估的順序是什麼?
顯然;
使效果以順序方式發生。但是,函數調用或應用程序,操作員評估順序等等呢?
我瞥了一眼F#規範,但沒有提到這一點。感謝您的任何見解!
我在讀this,現在想知道:F#中的評估順序是什麼?F#評估的順序是什麼?
顯然;
使效果以順序方式發生。但是,函數調用或應用程序,操作員評估順序等等呢?
我瞥了一眼F#規範,但沒有提到這一點。感謝您的任何見解!
我發現了一些電子郵件,我們在那裏修復了實施以獲得嚴格的申請順序。代碼
open System
let f a =
Console.WriteLine "app1";
fun b ->
Console.WriteLine "app2";
()
(Console.WriteLine "f"; f) (Console.WriteLine "arg1") (Console.WriteLine "arg2")
將打印「f」,「arg1」,「arg2」,「app1」,「app2」。然而這並沒有使其成爲規範。我會提交一個規格錯誤。
(所述spec的一些其它部分已經更明確的,例如
6.9.6評價方法應用
對於方法闡述應用中,表達的詳盡形式將或者EXPR .M(args)或M(args)。
(可選)expr和args按照從左到右的順序進行計算,成員在具有映射到相應參數值的形式參數的環境中進行評估。
如果expr的計算結果爲null,則引發NullReferenceException。
如果該方法是一個虛擬調度槽(即聲明爲抽象的方法),則根據expr值的調度映射選擇該成員的主體。
儘管如此,一些專家認爲,你會活得更長,更幸福的生活,如果你不依賴於評估順序。 :))
(也可能看到
http://blogs.msdn.com/ericlippert/archive/2009/11/19/always-write-a-spec-part-one.aspx
http://blogs.msdn.com/ericlippert/archive/2009/11/23/always-write-a-spec-part-two.aspx
以獲得更多關於它是多麼容易搞砸與評估順序。)
嘿,謝謝。事實上,如果你編碼報價解釋器,我就會問這個問題。如果您想確保EXACT與未加引號的代碼相同,您需要知道F#評估順序。 – Stringer 2011-01-23 00:09:40