Почему RequireQualifiedAccess не работает, что приводит к ошибке компиляции, но не в том случае, если я использую open?
У меня возникли проблемы с 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
? Это ошибка компилятора?