不是导入整个模块,是否有办法在另一个模块中打开特定的函数?比如:
open TestFuncs with [myTestFuncInOtherModule]
正如您在文档中看到的,open
关键字实际上并没有加载模块或命名空间。它只允许你引用模块/命名空间中的元素,而不需要引用它们的完全限定名。
因此,当您使用open
时,您只是使调用该模块中的函数更容易,而不是实际导入/加载它们在内存中,所以这个问题的简短答案是使用open关键字您不能只对一个函数这样做。
您可以使用let
绑定轻松实现相同的功能,但是:
let f = TestFuncs.myTestFuncInOtherModule
目前还不可能,但我实际上已经请求将其添加到语言中。如果你想在f# 4.0中看到这一点,你可以做的一件事就是投票支持这个请求。
另一个好的解决方法是"伪打开"模块:为您想要使用其内容的模块分配一个简短的名称。像这样:
module TP = Microsoft.FSharp.Data.TypeProviders
type mySchema = TP.SqlDataConnection<"...">
let db = mySchema.GetDataContext()
这使您不必在每次要引用其内容时键入整个模块名称,但您可以保持对名称空间的控制:这样,当您将模块更新到新版本并添加新名称时,就不会有意外的名称冲突的机会。
可以使用函数全名ModuleName.funcName
:
module One =
let square x = x * x
module Two =
let anothersquare x = One.square x