之间的含义有什么区别吗t<'a>
and 'a t
在 F# 中?即使在声明后它们也可以互换使用吗?
没有区别,是的,即使在声明后它们也可以互换使用。
但请注意F# 组件设计指南 http://fsharp.org/specs/component-design-guidelines/#consider-using-the-prefix-syntax-for-generics-foot-in-preference-to-postfix-syntax-t-foo-with-four-notable-exceptions-list-option-array-ref建议(第 4.2 节):
考虑对泛型使用前缀语法 (Foo<T>
) 优先
后缀语法 (T Foo
),有四个值得注意的例外(list
,
option
, array
, ref
).
F# 继承了 postfix ML 的命名风格
通用类型,例如“int list
” 以及前缀 .NET 样式,例如
“list<int>
”。您应该更喜欢 .NET 风格,除了四个
具体类型。对于 F# 列表,请使用后缀形式:“int list
”
而不是 ”list<int>
”。对于选项,请使用后缀形式:“int option
”
而不是 ”option<int>
”。对于数组,使用语法名称
“int[]
” 而不是“int array
” or “array<int>
”. For refs
,
使用 ”int ref
“ 而不是 ”ref<int>
” or “Ref<int>
”。对于所有其他
类型,使用前缀形式:“HashSet<int>
”, “Dictionary<string,int>
”,
因为这符合 .NET 标准
此外,如果您使用 ML 风格的通用参数列表表示法,您将收到编译器警告,例如('a,'b) t
vs. t<'a,'b>
.
当我们这样做时,请注意以下建议:第 3.1 节 http://fsharp.org/specs/component-design-guidelines/#do-use-the-net-naming-and-capitalization-conventions-for-object-oriented-code-including-f-facing-libraries同一指南:
请在公共 API 中使用 PascalCase 作为通用参数名称,
包括面向 F# 的库。特别是使用 T、U、
T1、T2 用于任意通用参数,并且当特定名称使
感觉,那么对于面向 F# 的库,请使用 Key、Value、Arg 等名称
(但不包括 TKey)。
(尽管我个人倾向于忽略面向 F# 的公共库的这一建议)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)