2013-09-27 30 views
1
在F#

類型推斷似乎不使用,都應該採取一個類類型的值的參數很好地工作。 有沒有辦法避免顯式類型註釋這樣的參數? 它看起來像一個問題,因爲當有一些5這樣的參數的每一個都需要其對括號和冒號和類型的名稱它看起來更混亂比在C#相同的聲明這對於更加語法嘈雜已知。有沒有一種方法可以避免顯式類型註釋參數在F#中的類的實例?

這樣,而不是

let writeXmlAttribute (writer: XmlWriter) name value =() 

我希望我能寫的東西像

let writeXmlAttribute writer name value =() // <-- a problem when in comes to writer.WriteStartAttribute name 

有沒有一種方法可以讓我擺脫它?

更新:

記錄沒有這樣的問題,只有在類。

+0

通常過度註解指示非慣用的代碼的。 –

+0

我同意,但是這是你必須處理與第三方.NET庫 –

+0

作爲標準的庫,例如工作的System.Xml什麼 –

回答

3

如果您對於希望避免這種情況的主要原因是清潔簽名,你可以移動的顯式類型與一個向上轉型(將推斷,由於它是一個編譯時確定的參數類型)的功能。然而,你並沒有避免它,你只是在移動它。

let writeXmlAttribute writer name value = 
    (writer :> XmlWriter).WriteStartAttribute(name, value) 

F#與你有關要求會員(包括記錄成員)的那種推理的難度,所以你必須至少做到在任何情況下顯式類型的最小量。

相關問題