F# 约束生成“此构造导致代码不太通用…”

F# 约束生成“此构造导致代码不太通用…”,f#,F#,我试图使用带有约束的泛型来允许访问参数的属性。访问函数内部的属性会生成此构造的编译时警告,这会导致代码不像类型注释所指示的那样通用。类型变量“项”已被约束为类型“Foo2” 名称空间测试 类型Foo={Bar:string;NotUsed:string} 类型Foo2={Bar:string} 模块共享= 当^item:member Bar:string=item.Bar时,让内联显示meabar项:^item 我是否犯了语法错误,或者这是不可能的?调用getter很奇怪。您可以这样明确地执行:

我试图使用带有约束的泛型来允许访问参数的属性。访问函数内部的属性会生成此构造的编译时警告,这会导致代码不像类型注释所指示的那样通用。类型变量“项”已被约束为类型“Foo2”

名称空间测试 类型Foo={Bar:string;NotUsed:string} 类型Foo2={Bar:string} 模块共享= 当^item:member Bar:string=item.Bar时,让内联显示meabar项:^item
我是否犯了语法错误,或者这是不可能的?

调用getter很奇怪。您可以这样明确地执行:

let inline showMeABar item =
    (^Item : (member Bar : string) item)

记录标签有一个奇怪但有用的特性,即它们与点表示法的使用是对类型推断的提示。因此出现了奇怪的错误消息。

调用getter很奇怪。您可以这样明确地执行:

let inline showMeABar item =
    (^Item : (member Bar : string) item)

记录标签有一个奇怪但有用的特性,即它们与点表示法的使用是对类型推断的提示。因此出现了奇怪的错误消息。

请注意,您可以删除项上的批注,因为现在可以从调用站点推断出它。@kvb正确,谢谢!编辑。我正要试着缩短它是否被允许。还添加了一个关于编译器警告的注释,其中通常会出现不确定类型errorThank you@vandroy。我以前从未见过这种成员访问语法。你知道使用它的好参考吗?@ShawnMartin我不知道有什么好推荐的。我想这是一个很少使用的功能。但是,对静态成员约束的web搜索提供了很多示例。请注意,您可以删除项上的批注,因为现在可以从调用站点推断出它。@kvb Right,谢谢!编辑。我正要试着缩短它是否被允许。还添加了一个关于编译器警告的注释,其中通常会出现不确定类型errorThank you@vandroy。我以前从未见过这种成员访问语法。你知道使用它的好参考吗?@ShawnMartin我不知道有什么好推荐的。我想这是一个很少使用的功能。但是,对静态成员约束的web搜索给出了许多示例。