我正在尝试在F#中实现鸭子类型,并发现你可以通过以下方式在F#泛型中使用成员约束:
type ListEntryViewModel<'T when 'T : (member Name : string)>(model:'T) =
inherit ViewModelBase()
member this.Name with get() = model.Name
然而,当我试图引用该属性时,上述代码将无法编译。我会得到一个编译器错误:
此代码不够通用。类型变量^T,当^T:(member get_Name: ^T -> string)时,不能泛化,因为它将逃离其作用域。
是否可能通过泛型约束来实现鸭子类型?