1. ホーム
  2. f#

[解決済み] F#の名前空間とモジュールの違いは何ですか?

2023-03-22 12:26:19

質問

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

ありがとうございます。

デイブ

編集部:Brianさん、回答ありがとうございました。それは私が知りたかったことです。 ただ、明確にしておきたいのは、名前空間も同様に開くことができるのでしょうか(C#のusing文に似ている)?

どのように解決するのですか?

名前空間は .Net のもので、多くの強力な言語で一般的です。フレームワークを整理し、異なるライブラリ間での名前の競合を回避するための方法です。 あなたと私の両方が型 "Foo" を定義し、それらが異なる名前空間にある限り、プロジェクトでそれらを両方使用できます (たとえば NS1.Foo と NS2.Foo など)。 .Netの名前空間は型を含んでいます。

モジュールはF#のもので、quot;static class"にほぼ類似しています。それは、型と同様にlet-bound値と関数を保持できる実体です(名前空間は直接値や関数を含むことができないことに注意してください。) モジュール内のものは"ModuleName.Thing"で参照できます。これは名前空間と同じ構文ですが、F#のモジュールは、例えば、非限定アクセスを可能にするために「開く」ことも可能です。

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

(編集: 名前空間も同様に開くことができますが、モジュールが値や関数を含むことができるという事実は、モジュールを開くことをより「興味深い」ものにしています。)

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

かなり自由度の高い質問なので、多少なりともお役に立てれば幸いです :)