为什么RequireQualifiedAccess无法正常工作,导致编译错误,但是如果我使用open则不行?

时间:2016-08-22 16:49:56

标签: f#

我遇到了RequireQualifiedAccess的问题:尽管有这个属性,但工会案例正在影响一个类型。奇怪的是,如果我在封闭模块上使用合格访问权限,而不是在封闭模块内部或打开它时,则只会出现错误:

module Module =
    type [<RequireQualifiedAccess>] Du =
        | SomeCase

    type [<RequireQualifiedAccess>] SuperDu =
        | Du of Du

    let valid = Du.SomeCase // Valid, as expected

let invalid = Module.Du.SomeCase // Not defined?!?

open Module
let validToo = Du.SomeCase // Wait, this is valid again?

在无效行中,首先警告不要使用.Du没有限定访问权限,就像我引用SuperDu.Du一样,然后它会出错{{1没有定义。

我一直认为使用SomeCase相当于将open X添加到从该模块中获取的所有定义的前缀。但它显然不是......?

这里发生了什么?尽管X.,我是否必须避免这种名称冲突?这是编译器错误吗?

1 个答案:

答案 0 :(得分:3)

这是F#编译器中的一个问题,已经报告过了。有关更多信息,请参阅: