而不是導入一個完整的模塊,有沒有辦法打開另一個模塊中的特定功能?喜歡的東西:有沒有辦法在F#中導入(打開)特定函數?
open TestFuncs with [myTestFuncInOtherModule]
而不是導入一個完整的模塊,有沒有辦法打開另一個模塊中的特定功能?喜歡的東西:有沒有辦法在F#中導入(打開)特定函數?
open TestFuncs with [myTestFuncInOtherModule]
可以使用完整的函數名ModuleName.funcName
指特定的功能,另一個模塊:
module One =
let square x = x * x
module Two =
let anothersquare x = One.square x
正如你可以看到in the docs,該open
關鍵字不實際加載的模塊或命名空間。它只是允許您引用該模塊/名稱空間中的元素,而不用引用其完全限定的名稱。
因此,當您使用open
時,您只是更容易調用該模塊中的函數,而不是實際地將它們導入/加載到內存中,所以此問題的簡短答案是使用open關鍵字可以這不僅僅是爲了一個功能。
您可以用let
結合輕鬆實現同樣的事情,雖然:
let f = TestFuncs.myTestFuncInOtherModule
這不是當前可能的,但實際上我put in a request已爲此要添加的語言。如果你想在F#4.0中看到這一點,你可以做的一件事就是爲這個請求投票。
另一個很好的解決方法是,尚未被其他答案提及,是「僞打開」模塊:爲要使用其內容的模塊分配一個簡短名稱。像這樣:
module TP = Microsoft.FSharp.Data.TypeProviders
type mySchema = TP.SqlDataConnection<"...">
let db = mySchema.GetDataContext()
這使您不必要引用其內容每次鍵入完整的模塊名稱的便利的同時,您維護您的命名空間的控制:這種方式有沒有意外的名稱衝突的機會當您將模塊更新爲新版本並添加新名稱時。
啊。這也是一個不錯的主意。這就像Elixir的別名。 – Korbin