我遇到了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?这是编译器错误吗?
这是 F# 编译器中的一个问题,已报告过。欲了解更多信息,请参阅: