有没有办法在另一个模块中打开特定功能,而不是导入整个模块?类似的东西:
open TestFuncs with [myTestFuncInOtherModule]
答案 0 :(得分:5)
正如您所见in the docs,if let registerVC = self.storyboard?.instantiateViewControllerWithIdentifier("RegistrationViewControllerIdentifier") as? RegistrationViewController
{
UIView.animateWithDuration(0.0, animations: {
if let view = self.navigationController?.view
{
self.navigationController?.pushViewController(registerVC, animated: false)
UIView.setAnimationTransition(UIViewAnimationTransition.None, forView:view , cache: false)
}
}, completion: {
(value: Bool) in
})
}
关键字实际上并未加载模块或命名空间。它只允许您引用该模块/命名空间中的元素,而无需引用它们的完全限定名称。
这样,当你使用open
时,你只是简单地调用该模块中的函数,而不是实际导入/加载它们在内存中,所以这个问题的简短答案就是使用open关键字,您只能对一个函数执行此操作。
您可以使用open
绑定轻松实现相同的目标,但是:
let
答案 1 :(得分:3)
目前无法实现,但实际上put in a request已添加到该语言中。如果你想在F#4.0中看到这个添加,你可以做的一件事就是为该请求投票。
其他答案尚未提及的另一个好的解决方法是“伪开放”模块:为要使用其内容的模块指定一个简短的名称。像这样:
module TP = Microsoft.FSharp.Data.TypeProviders
type mySchema = TP.SqlDataConnection<"...">
let db = mySchema.GetDataContext()
这使您无需在每次要引用其内容时都键入整个模块名称,但是您可以保持对命名空间的控制:这样,当您将模块更新为a时,不会发生意外名称冲突的可能性新版本,它增加了新名称。
答案 2 :(得分:1)
您可以使用完整的函数名称ModuleName.funcName
来引用另一个模块中的特定函数:
module One =
let square x = x * x
module Two =
let anothersquare x = One.square x