15
我有一個命名衝突的問題,同時使用F#中的命名空間別名?
open System.IO
我發現,現在用的是提供的類型衝突的類型全名的唯一選擇開在我的F#代碼一些.NET程序集,但是這是一個有點無聊。
有沒有可能在F#中爲.Net命名空間定義別名以防止名稱衝突?
我有一個命名衝突的問題,同時使用F#中的命名空間別名?
open System.IO
我發現,現在用的是提供的類型衝突的類型全名的唯一選擇開在我的F#代碼一些.NET程序集,但是這是一個有點無聊。
有沒有可能在F#中爲.Net命名空間定義別名以防止名稱衝突?
F#不支持名稱空間的別名 - 僅限模塊和類型。因此,爲了解決.NET程序集之間的衝突,您將不得不爲所有您使用的類型定義別名。
由於F#類型別名被視爲普通類型聲明(由F#編譯器,而不是由運行時),這可能會稍微容易一些。這意味着,不像用C#using
關鍵字,您可以在spearate文件中定義他們:
// Aliases.fs
namespace SysIO
// Open the 'System' namespace to get a bit shorter syntax
// ('type File = File' is interpreted as discriminated union)
open System
type File = IO.File
type Directory = IO.Directory
在應用程序的其餘部分,你現在可以使用SysIO.File
。你仍然必須寫別名,但至少你不必在每個文件中都這麼做......
這是一個不錯的解決方案,我只需要少數幾種類型。 – 2012-02-21 14:34:27
「僅模塊和類型」:它只是類型,模塊不能被別名。會很高興地錯了。 – citykid 2014-09-22 09:29:17
高興地錯了我。模塊可以是這樣的別名:模塊ACMEStore = ACME.DB.Store(http://stackoverflow.com/questions/3918744/how-to-use-namespace-or-type-alias-abbreviation) – citykid 2014-09-22 10:08:19