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

Van*_*oiy 7 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?
Run Code Online (Sandbox Code Playgroud)

在无效行中,首先出现一个警告,即.Du不使用限定访问权限,不推荐使用,就像我所指的那样SuperDu.Du,然后它会给出一个SomeCase未定义的错误.

我一直认为,使用open X等同于X.从该模块中获取的所有定义的前缀.但它显然不是......?

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