【发布时间】:2012-10-22 12:48:33
【问题描述】:
我正在尝试在 F# 中实现鸭子输入,我发现您可以有一个 member constraint in F# generics,如下所示:
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) 无法概括,因为 它会逃脱它的范围。
是否可以通过泛型约束来实现鸭子类型?
【问题讨论】:
-
请注意,这并不是真正的“鸭式打字”,而是结构(子)打字。