F#の学習を始めたばかりです(.NETの使用経験はほとんどありません)。おそらく非常に単純な質問です。F#の名前空間とモジュールの違いは何ですか?
ありがとう
デイブ
編集:答えをありがとうブライアン。それが私が知りたかったことです。明確化:名前空間も開くことができますか(C#usingステートメントと同様)?
F#の学習を始めたばかりです(.NETの使用経験はほとんどありません)。おそらく非常に単純な質問です。F#の名前空間とモジュールの違いは何ですか?
ありがとう
デイブ
編集:答えをありがとうブライアン。それが私が知りたかったことです。明確化:名前空間も開くことができますか(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#の「トップレベル」でコードを入力すると、このコードは暗黙的にモジュールに入ります。
それがいくらか役立つことを願っています、それはかなり自由形式の質問です。:)