F#中的t<'a>
和'a t
之間的含義是否有區別?即使申報後它們可以互換使用嗎?t <'a>和F#中的一個t之間的任何差異?
回答
沒有區別,是的,即使在聲明後它們也可以互換使用。
但是千萬注意F# Component Design Guidelines建議(第4.2節):
考慮優先 使用泛型前綴語法(
Foo<T>
)爲後綴的語法(T Foo
),有四個顯着的例外(list
,option
,array
,ref
)。F#繼承了後綴ML風格的命名 泛型類型,例如, 「
int list
」以及前綴.NET風格,例如 「list<int>
」。你應該更喜歡.NET風格,除了四個 特定類型。對於F#列表,使用後綴形式:「int list
」 而不是「list<int>
」。對於選項,請使用後綴表格:「int option
」 而不是「option<int>
」。對於數組,請使用句法名稱 「int[]
」而不是「int array
」或「array<int>
」。對於refs
, 使用「int ref
」而不是「ref<int>
」或「Ref<int>
」。對於所有其他類型的 ,使用前綴形式:「HashSet<int>
」,「Dictionary<string,int>
」, 因爲這符合.NET標準
此外,你如果使用ML-風格一般得到一個編譯器警告參數列表符號,例如('a,'b) t
與t<'a,'b>
。
雖然我們在這,注意以下幾點建議在同一引導Section 3.1:
不要在公共API使用PascalCase的泛型參數名稱, 包括F#-facing庫。特別是,對於任意通用參數,使用T,U, 這樣的名稱,並且當特定名稱使得 有意義時,則對於面向F#的庫,使用諸如Key,Value,Arg (但不包括例如TKey)的名稱。
(雖然我個人傾向於忽視F#面向公共圖書館的這一建議)。
沒有什麼區別,不知道這是否值得一個完整的答案!我更喜歡前者,尤其是涉及多種類型參數時(後者有可能)。
我想說的區別是可讀性。對於一個參數,'
語法不會過度混淆,但是當您獲取它們的列表時,讀取尖括號版本將變得更加容易。
我認爲'a t
語法是更慣用的(它是在幾乎所有的MSDN實施例中使用和發射由編譯器將生成語法簽名文件)
沒有爲陣列一個類似的例子
int[] , int array
的'a t
語法也是混凝土參數更好 -
int list, List<int>
所以一些一致性主張'a t
- 1. std和t分佈之間的差異
- 2. Seq [T]和T *之間的Scala有差異嗎?
- 3. 訂閱和訂閱者之間的差異<T> angular2
- 4. NHibernate的差異,獲取<T>和負載<T>
- 5. 如何在Java中定義F <T>和F <T,U>和F <T,U,V>接口?
- 6. List.Last()和List.Last <T>()之間是否有任何顯着差異?
- 7. 函數返回中const T&和T之間的差別
- 8. System.Collections.Generic.List之間的區別<T> .ToArray()和System.Linq.Enumerable.ToArray <T>()?
- 9. 懶惰<T>和LazyInit之間的區別<T>
- 10. 「<T extends Comparable <T>>」和「<T extends Comparable <Comparable <T> >>」之間的區別?
- 11. 是什麼的printf( 「\%d」,&t);和printf( 「%d」,T)之間的差;
- 12. Unifying任務<T>和F#MailboxProcessor異常處理
- 13. 在IList <T>和List之間使用哪一個<T>
- 14. taskkill和taskkill/f之間的差異
- 15. Scala中的「for(elm < - myList)yield f(_)」和「myList map f(_)」之間的差異
- 16. T-SQL獲得兩個表之間差異的計數
- 17. C++ 11:T和T&推導[行爲差異,兩者之間] decltype行爲
- 18. Rhino Mocks - GenerateStub之間的區別<T>&GenerateMock <T>
- 19. 事件EventHandler之間的區別<T> vs EventHandler <T>
- 20. 爲什麼「模板<class T> void f(T&t)」覆蓋T中的函數,但「template <class T> void f(T t)」不能?
- 21. 差T獲取<T>(INT ID)和T獲取(INT ID)
- 22. 的IList <T>,IEnumerable的<T>和的ObservableCollection <T>
- 23. <T extends A> void foo(T t)和void foo(A a)之間的區別
- 24. Joiner T/F之前的更新策略T/F
- 25. 什麼不同IData的<out T>和IData的之間<T>
- 26. 從任務中檢索T <T>
- 27. [Import]和_container.GetExportedValue <>()之間的任何差異?
- 28. std :: is_signed之間的區別<T>和std :: numeric_limits <T> :: is_signed?
- 29. IEnumerable之間的區別<T>。逆向和列表<T>。逆
- 30. 主題<T>和ReplaySubject <T>之間的主要區別是什麼?
是的,你在OCaml中執行'(string,float)Hashtbl.t'。 – 2012-04-16 17:59:48