2009-07-31 50 views
5

在我們可以在f#中創建類的方法中存在這種二分法,這真令我困擾。我可以使用隱式格式或顯式格式創建類。但是我想要的某些功能只能用於隱式格式,有些功能只能用於顯式格式。關於F#面向對象編程

例如:

  1. 我不能使用let inline *(或單獨let)顯式定義的類中。

  2. 在隱式定義的類中定義不可變的public字段(不屬性*)的唯一方法是val bla : bla語法。

    但這裏有一個冗餘。因爲我最終會得到兩個相同的不可變數據副本,一個是私有的,一個是公共的(因爲在隱式模式下構造器參數在整個類存在中都存在)

  3. (不太相關)需要使用屬性對於方法重載和字段的默認值是相當不合適的。

無論如何我可以解決這個問題嗎?

*出於性能方面的

編輯:原來我錯了約兩個點(感謝加內什·錫坦帕勒姆& MichaelGG)。

  1. 雖然我不能在這兩個隱含&明確的類定義使用let inline,我可以用member inline就好了,我以爲做同樣的事情。

  2. 顯然最新的F#不再有任何冗餘,因爲在類體中沒有使用的任何參數都是構造函數的本地對象。

  3. Will be gone在下一個F#版本。

+0

「出於性能原因」?不能說我喜歡那種聲音;) – Juliet 2009-08-01 00:44:57

+0

它主要是與圖形編程相關的數字處理。請參閱:http://blogs.msdn.com/ricom/archive/2006/09/07/745085.aspx。 – 2009-08-01 20:38:37

回答

5

這可能沒有幫助,但可以使內聯成員。 「會員內聯私人」工作正常。

1

對於let inline,您可以通過移動它的類之外,明確地傳遞調用它時,你從類的範圍內需要的任何值解決。由於它將被內聯,因此這樣做不會有性能損失。