是否可以在 F# 中的单个语句中打开给定模块的所有子模块?
Can all submodules of a given module be opened in a single statement in F#?
我的应用程序中的某些部分有这样的东西:
open ModuleX
open ModuleX.Submodule1
open ModuleX.Submodule2
open ModuleX.Submodule3
open ModuleX.Submodule4
open ModuleX.Submodule5
open ModuleX.Submodule6
有什么简单的方法可以做到:
open ModuleX
open ModuleX.*
我的应用程序中最糟糕的情况是一个模块有 27 行模块打开语句。我可以将它分成不同的文件,但我只会将开口分成不同的文件,并没有真正解决任何问题。你会建议 "merge" 个子模块吗?自动打开不适合我的情况。
或者这只是任何使用 F# 的人都必须处理的事情吗?
没有办法在打开的时候控制这个,但是你可以让这些模块"automatically openable"在它们的声明点。为此,用 [<AutoOpen>]
:
装饰它们
module A =
[<AutoOpen>]
module B =
let x = 5
module C =
let y = 6
open A
let z = x // x is now available
let u = C.y // y still requires qualified access
购买 [<AutoOpen>]
的人也喜欢 [<RequireQualifiedAccess>]
:-)
[<RequireQualifiedAccess>]
module C =
let y = 6
open C // Compiler error
我的应用程序中的某些部分有这样的东西:
open ModuleX
open ModuleX.Submodule1
open ModuleX.Submodule2
open ModuleX.Submodule3
open ModuleX.Submodule4
open ModuleX.Submodule5
open ModuleX.Submodule6
有什么简单的方法可以做到:
open ModuleX
open ModuleX.*
我的应用程序中最糟糕的情况是一个模块有 27 行模块打开语句。我可以将它分成不同的文件,但我只会将开口分成不同的文件,并没有真正解决任何问题。你会建议 "merge" 个子模块吗?自动打开不适合我的情况。
或者这只是任何使用 F# 的人都必须处理的事情吗?
没有办法在打开的时候控制这个,但是你可以让这些模块"automatically openable"在它们的声明点。为此,用 [<AutoOpen>]
:
module A =
[<AutoOpen>]
module B =
let x = 5
module C =
let y = 6
open A
let z = x // x is now available
let u = C.y // y still requires qualified access
购买 [<AutoOpen>]
的人也喜欢 [<RequireQualifiedAccess>]
:-)
[<RequireQualifiedAccess>]
module C =
let y = 6
open C // Compiler error