2014-02-07 62 views
1

我有一個問題,我不確定要使用哪種數據類型。目前我已經去了Array2D<'T>,但我可能會改變我的想法在未來使用另一個容器。在C++中,我將使用實例方法,並且可以使用我可以隨時更改的一個typedef(只要我的新容器支持所有必需的方法)。這將提供一個乾淨的抽象層,允許我根據需要進行更改。創建一個乾淨的抽象層

我該如何在F#中做類似的事情? typedef有什麼用?這是什麼人會使用Haskell的'更高kinded類型'?如果在使用所有的方法都是一樣的縮寫類型

type MyType<'T> = Array2D<'T>

你可以運用MyType <「T>無處不在,然後替換實際執行

+0

我認爲在.NET中的問題是很難找到具有相同方法的類型。我在[本項目]中做了初步工作(https://github.com/gmpl/FSharpPlus/blob/bb60400df656bf848a0de2d4503783b4b034b773/src/FSharpPlus/Operators.fs#L250)(請參閱集合和可摺疊)以便能夠切換在實現之間。這種技術與Haskell的類型類似。 – Gustavo

回答

2

Type abbreviations可以工作。縮略語在編譯時被刪除。

雖然,正如Gustavo在評論中所說的那樣,在.NET中,相同的方法在類型/類上並不常見,除非它們是從相同的基類/類派生或實現相同的接口 - 那麼更自然直接使用接口。

+0

我想我正在想更多的功能風格,我不一定會使用實例方法。 –

+0

我知道可以打開另一個模塊來重新定義運算符(請參閱http://stackoverflow.com/questions/2271198/f-checked-arithmetics-scope),但還沒有嘗試過,不知道它是否適用於其他靜態方法。高級函數也會浮現在腦海,取決於您想要達到的目標。 –