在f#中有没有一种方法可以导入(打开)特定的函数?



不是导入整个模块,是否有办法在另一个模块中打开特定的函数?比如:

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

最新更新