web-dev-qa-db-ja.com

F#の名前空間とモジュールの違いは何ですか?

F#の学習を始めたばかりです(.NETの経験はほとんどありません)。おそらく非常に単純な質問であるF#の名前空間とモジュールの違いは何ですか?

ありがとう

デイブ

編集:答えブライアンをありがとう。それが私が知りたかったことです。明確化:名前空間も開くことができますか(C#のusingステートメントと同様)?

81
Dave Berk

名前空間は、多くの産業用強度の言語で一般的な.Netのことであり、フレームワークを編成し、異なるライブラリ間での名前の競合を回避する方法にすぎません。あなたも私も、タイプ「Foo」を定義し、それらが異なる名前空間(例:NS1.FooとNS2.Foo)にあれば、プロジェクトで両方を使用できます。 .Netの名前空間にはタイプが含まれます。

モジュールはF#のものであり、「静的クラス」にほぼ類似しています...バインドされた値と関数、および型を保持できるエンティティです(名前空間に値/関数、名前空間を直接含めることはできません)タイプのみを含めることができ、タイプ自体は値と関数を含めることができます)。モジュール内のものは、名前空間の場合と同じ構文である「ModuleName.Thing」を介して参照できますが、F#のモジュールを「開く」ことで、修飾されていないアクセスを許可することもできます。

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

(編集:名前空間も同様に開くことができますが、モジュールに値と関数を含めることができるという事実により、使用できる名前である「cos」などの値と関数を試すことができるという点で、モジュールを開くことはより「興味深い」ものになります。直接。他の.Net言語では通常、常に修飾する必要があります(例: "Math.cos")。

F#の「トップレベル」でコードを入力すると、このコードは暗黙的にモジュールに入ります。

それが多少役立つことを願って、それはかなり自由回答式の質問です。 :)

88
Brian