【发布时间】:2018-10-06 04:45:26
【问题描述】:
在 F# 中工作,无法理解以下两项的区别:
type A<'k, 'v when 'v : comparison and 'k : comparison> =
{ Keys: Map<'v, 'k> } with
member this.length = Map.count this.Keys
module A =
let empty = { Keys = Map.empty }
type B<'k, 'v when 'v : comparison and 'k : comparison>(keys: Map<'v, 'k>) =
member __.length = Map.count keys
module B =
let empty = new B<'k, 'v>(Map.empty)
如果我查看 A.empty 和 B.empty 的推断类型,我会得到以下信息:
val empty : A<'a,'b> (requires comparison and comparison)
val empty : B<System.IComparable,System.IComparable>
为什么它们不同? 'k 和 'v 都被分配给 F# Map,并以相同的方式使用。唯一的区别是 B 上的“new”关键字,但为什么会改变为 Map 推断的类型?
【问题讨论】:
标签: f#