约束生成"这种结构导致代码不那么通用......"

时间:2014-11-20 20:10:57

标签: f#

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

namespace Test
type Foo = { Bar:string; NotUsed:string }
type Foo2 = { Bar:string }

module Shared =
    let inline showMeABar (item: ^Item when ^Item : (member Bar : string)) = item.Bar

我是否犯了语法错误或者这是不可能的?

1 个答案:

答案 0 :(得分:3)

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

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

记录标签具有奇怪(但有用)的属性,它们使用点符号表示类型推断。因此奇怪的错误信息。