Ste*_*sen 14
没有区别,是的,即使在声明之后它们也可以互换使用.
但请注意F#组件设计指南建议(第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) tvs. ,您将收到编译器警告t<'a,'b>.
在我们参与其中时,请注意同一指南第3.1节中的以下建议:
在公共API中使用PascalCase作为通用参数名称,包括F#-facing库.特别是,使用T,U,T1,T2等名称作为任意通用参数,当特定名称有意义时,对于F#表面库,使用Key,Value,Arg等名称(但不是例如TKey).
(虽然我个人倾向于忽略F#公共图书馆的这一建议).