F# 在F中自动打开命名空间#
Hi想知道如何使f#编译器自动打开名称空间 我有F# 在F中自动打开命名空间#,f#,module,namespaces,F#,Module,Namespaces,Hi想知道如何使f#编译器自动打开名称空间 我有 namespace XXX I have to add something here do(AutoOpen("XXX.YYY")) or something like that to make the XXX.YYY module to be opened when referencing the library from external projects. [<AutoOpen>] module YYY = ..
namespace XXX
I have to add something here do(AutoOpen("XXX.YYY")) or something like that to make the XXX.YYY module to be opened when referencing the library from external projects.
[<AutoOpen>]
module YYY =
....
名称空间XXX
我必须在这里添加一些东西(AutoOpen(“XXX.YYY”)或类似的东西,以便在从外部项目引用库时打开XXX.YYY模块。
[]
模块YYY=
....
谢谢自动打开属性只能应用于F#
模块
,因此您无法将其添加到整个命名空间
。然而,由于您可以将所有的F#声明放在一个模块中,这可能就足够满足您的需要了。语法是:
[<AutoOpen>]
module MyGlobals =
// Declarations in the module
type Foo() =
member x.Bar = 10
[]
模块MyGlobals=
//模块中的声明
键入Foo()
构件x.杆=10
引用程序集时,应立即看到
Foo
。如果声明放在另一个名称空间中(即MyLibrary
),则需要添加openmylibrary
,但MyGlobals
将自动访问。要在不首先打开其父级的情况下打开名称空间/模块,必须在程序集级别添加属性。
您可以通过向项目中添加AssemblyInfo.fs文件来完成此操作:
在以下代码的情况下:
namespace Framework
module GlobalFunctions =
let Test () =
10.
例如,您可以将以下代码添加到AssemblyInfo.fs:
namespace Framework
[<assembly:AutoOpen("Framework.GlobalFunctions")>]
do()
导致:
--> Referenced 'C:\PathToAssembly\Assembly.dll'
val result : float = 10.0
你为什么要这么做?自动打开模块对您来说还不够吗?不,我希望一旦我从外部项目引用了库,到XXX.YYY的路径就会自动打开,并且我可以访问模块XXX.YYY中的函数。我知道它看起来就像我在代码段中看到的一样,但我记不清了。嗨,托马斯,请参阅我之前对pad的注释。我想要的和你的建议有点不同
--> Referenced 'C:\PathToAssembly\Assembly.dll'
val result : float = 10.0