Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在F#中导入(打开)特定函数?_F# - Fatal编程技术网

有没有办法在F#中导入(打开)特定函数?

有没有办法在F#中导入(打开)特定函数?,f#,F#,是否有办法在另一个模块中打开特定函数,而不是导入整个模块?比如: open TestFuncs with [myTestFuncInOtherModule] 您可以使用完整的函数名ModuleName.funcName,引用另一个模块中的特定函数: module One = let square x = x * x module Two = let anothersquare x = One.square x 如您所见,open关键字实际上并没有加载模块或名称空间。它只允许

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

open TestFuncs with [myTestFuncInOtherModule]

您可以使用完整的函数名
ModuleName.funcName
,引用另一个模块中的特定函数:

module One =
    let square x = x * x

module Two =
    let anothersquare x = One.square x
如您所见,
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()
module TP=Microsoft.FSharp.Data.TypeProviders
键入mySchema=TP.SqlDataConnection
设db=mySchema.GetDataContext()

这为您提供了方便,您不必在每次要引用其内容时都键入整个模块名,但您可以保持对命名空间的控制:这样,当您将模块更新为新版本并添加新名称时,就不会发生意外的名称冲突。

Ah。这也是个不错的主意。这就像Elixir中的别名。请求的链接已断开