2012-04-16 102 views

回答

14

没有区别,是的,即使在声明后它们也可以互换使用。

但是千万注意F# Component Design Guidelines建议(第4.2节):

考虑优先 使用泛型前缀语法(Foo<T>)为后缀的语法(T Foo),有四个显着的例外(listoptionarrayref)。

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) tt<'a,'b>

虽然我们在这,注意以下几点建议在同一引导Section 3.1

不要在公共API使用PascalCase的泛型参数名称, 包括F#-facing库。特别是,对于任意通用参数,使用T,U, 这样的名称,并且当特定名称使得 有意义时,则对于面向F#的库,使用诸如Key,Value,Arg (但不包括例如TKey)的名称。

(虽然我个人倾向于忽视F#面向公共图书馆的这一建议)。

3

没有什么区别,不知道这是否值得一个完整的答案!我更喜欢前者,尤其是涉及多种类型参数时(后者有可能)。

+1

是的,你在OCaml中执行'(string,float)Hashtbl.t'。 – 2012-04-16 17:59:48

1

我想说的区别是可读性。对于一个参数,'语法不会过度混淆,但是当您获取它们的列表时,读取尖括号版本将变得更加容易。

2

我认为'a t语法是更惯用的(它是在几乎所有的MSDN实施例中使用和发射由编译器将生成语法签名文件)

没有为阵列一个类似的例子

int[] , int array 

'a t语法也是混凝土参数更好 -

int list, List<int> 

所以一些一致性主张'a t

相关问题