我在使用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
一样,然后给出一个错误,即未定义SomeCase
。我一直认为,使用
open X
等同于将X.
前缀到该模块的所有定义之前。但这显然不是...?这里发生了什么?尽管有
RequireQualifiedAccess
,我是否必须避免这种名称冲突?这是编译器错误吗? 最佳答案
这是F#编译器中的一个问题,已经有报道。有关更多信息,请参见:
[<RequireQualifiedAccess>]
on a DU shadows types in the same module