簡體   English   中英

F#中命名空間和模塊之間的區別是什么?

[英]What the difference between a namespace and a module in F#?

我剛開始學習F#(之前幾乎沒有.NET經驗),請原諒我可能是一個非常簡單的問題:F#中命名空間和模塊之間的區別是什么?

謝謝

戴夫

編輯:謝謝Brian的回答。 這就是我想知道的。 只是澄清:您是否也可以打開命名空間(類似於C#using語句)?

命名空間是一種.Net的東西,在許多工業級語言中很常見,只是一種組織框架和避免不同庫之間命名沖突的方法。 您和我都可以定義類型“Foo”並在項目中使用它們,只要它們位於不同的名稱空間(例如NS1.Foo和NS2.Foo)。 .Net中的命名空間包含類型。

模塊是F#的東西,它大致類似於“靜態類”......它是一個可以保存let-bound值和函數的實體,以及類型(請注意,名稱空間不能直接包含值/函數,名稱空間只能包含類型,它們本身可以包含值和函數)。 模塊內部的東西可以通過“ModuleName.Thing”引用,這與命名空間的語法相同,但F#中的模塊也可以“打開”以允許不合格的訪問,例如

open ModuleName
...
Thing  // rather than ModuleName.Thing

(編輯:命名空間也可以類似地打開,但模塊可以包含值和函數的事實使得打開模塊更“有趣”,因為你可以結束值和函數,例如“cos”,你可以使用的名稱直接,而在其他.Net語言中,您通常必須對其進行限定,例如“Math.cos”)。

如果您在F#中的“頂層”輸入代碼,則此代碼隱含在模塊中。

希望有所幫助,這是一個非常開放的問題。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM