我试图使用带约束的泛型来允许访问参数的属性。访问函数内部的属性会产生编译时警告"此构造导致代码不像类型注释所指示的那样通用。类型变量'项目已被约束为类型' 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
我是否犯了语法错误或者这是不可能的?
答案 0 :(得分:3)
调用getter很奇怪。您可以这样明确地执行此操作:
let inline showMeABar item =
(^Item : (member Bar : string) item)
记录标签具有奇怪(但有用)的属性,它们使用点符号表示类型推断。因此奇怪的错误信息。