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. 懒惰<T>和LazyInit之间的区别<T>
- 8. 是什么的printf( “\%d”,&t);和printf( “%d”,T)之间的差;
- 9. 在IList <T>和List之间使用哪一个<T>
- 10. T-SQL获得两个表之间差异的计数
- 11. C++ 11:T和T&推导[行为差异,两者之间] decltype行为
- 12. Rhino Mocks - GenerateStub之间的区别<T>&GenerateMock <T>
- 13. 事件EventHandler之间的区别<T> vs EventHandler <T>
- 14. 为什么“模板<class T> void f(T&t)”覆盖T中的函数,但“template <class T> void f(T t)”不能?
- 15. 从任务中检索T <T>
- 16. 主题<T>和ReplaySubject <T>之间的主要区别是什么?
- 17. std :: is_signed之间的区别<T>和std :: numeric_limits <T> :: is_signed?
- 18. t-sql - 计算每行的日期之间的差异
- 19. 提取字符串之间的差异t-sql
- 20. .NET与T-SQL之间的比较差异?
- 21. 的一个IQueryable <T>
- 22. &T与&T,&T与T之间的区别
- 23. C#GetAwaiter异步任务<T>
- 24. 在列表<T>和IEnumerable之间自由转换<T>
- 25. 列表<T>和列表<object>之间的区别?
- 26. 如何检查是否F [T] <:G [T] FORALL在宏
- 27. 一个可重用谓词的EntitySet <T>,IQueryable的<T>和IEnumerable <T>
- 28. C#-IComparable <T>和IEquatable <T>
- 29. 为什么使用Marshal.AlignedSizeOfStruct <T>代替SafeBuffer.WriteArray中的Marshal.SizeOfStruct <T><T>和SafeBuffer.ReadArray <T>?
- 30. IEqualityComparer <T>和IEquatable <T>和有什么不一样?
是的,你在OCaml中执行'(string,float)Hashtbl.t'。 – 2012-04-16 17:59:48