是否可以在静态字段上使用显式成员约束?

时间:2016-09-11 17:50:05

标签: f# constraints type-parameter

使用F#,我有以下(简化),工作正常:

type MyInt =
    struct 
        val Value: int
        new v = { Value = v }
    end
    static member inline name() = "my_int"   // relevant line

let inline getName (tp: ^a): string = (^a: (static member name : unit -> string) ())

在我看来,显式成员约束中的静态解析成员签名需要一个函数。我想知道它是否也可以用于字段。我试了几件事:

以下内容将进行编译,但无法正常工作,并且会因错误

而失败
  

错误FS0001:类型' MyInt'不支持运营商' get_name'

type MyInt =
    //...
    static member inline name = "my_int"

let inline getName (tp: ^a): string = (^a: (static member name : string) ())

删除()以防止它尝试调用gettor是语法错误。如果我将其更改为实际实现gettor,它可以工作(但它与原始代码基本相同)。

type MyInt =
    // ...
    static member inline name with get() = "my_int"

let inline getName (tp: ^a): string = (^a: (static member name : string) ())

有没有办法使用显式成员约束或类似方法获取编译器来查找静态字段?或者这只是限制语法的限制?

更新

令人惊讶的是,它确实适用于实例字段,或者在这种情况下,结构字段:使用(^a: (member Value: 'b) ()),它将调用成员Value

0 个答案:

没有答案