1

ファイルとディレクトリは異なる名前空間を持つ可能性があり、特定のファイルを識別するために引き続き使用されます。これは、同じ名前のファイルとディレクトリが異なる種類のものであることによって区別できるためです。

プリミティブ フィールドと参照フィールドは、(Java では) 異なる名前空間を持つこともできます。これは、プリミティブ フィールドと参照フィールドが同じ名前である場合、それらは異なる種類のものとして識別される可能性があるためです。

別の名前空間は、このように別の場所で使用されます。たとえば、Java ではメソッドexampleName()とフィールドを持つことができexampleNameます。これらは同じ名前ですが、異なる種類のものとして区別されます。

4

3 に答える 3

2

まず、この質問は言語固有のものです。純粋な OOP 言語では、原子要素と複合要素の間に区別はありません。すべてがオブジェクトです。同様の理由で、純粋な関数型言語では、関数と変数に同じ名前を付けることはできません。

第 2 に、ポリモーフィック操作を使用している場合、どの変数を参照したかを知る方法がありません。たとえば、次のようなポリモーフィック操作のため、ファイルとディレクトリに異なる名前空間を設定することはできません。

cp foo bar

cp はファイルとディレクトリで機能し、名前空間が異なる場合、何を意味していたのかを知る方法はありません。

于 2009-05-31T09:04:50.570 に答える
1

これが良い考えだとは思いません。その理由には、ファイル システム コードのパフォーマンスやシンプルさが関係していると思います。ディレクトリ リストが 2 つか 3 つ、またはそれ以上の異なる名前空間を持つ必要があるかどうかに応じて、2 つまたは 3 つ以上の異なるパスをたどらなければならない場合、これはおそらくコードを複雑にするでしょう。

さらに、発生する可能性があるエンド ユーザーの混乱を考慮してください。現在、ファイル拡張子を使用することで、ファイルシステムで利用できる一種の名前空間があります。file.txt と file.dll と file.exe をすべて同じディレクトリに存在させることができます。これらのファイルが同時に存在するとどうなるかは懸念事項です。これは、ウイルス作成者がソーシャル エンジニアリングの形式を使用して、ユーザーに間違ったファイルをクリックさせる方法の 1 つです。ディレクトリを同じ名前のファイルと混同できると想像してみてください。

于 2009-05-31T09:05:48.710 に答える
0

ディレクトリとファイルは、必ずしもそれほど異なるわけではありません。どちらも親ディレクトリのエントリであり、エントリがディレクトリかどうかを示すフラグが付いているだけです。ディレクトリを開いて、それがファイルであるかのように読み取ることができます。ただし、他の特定の操作が可能です。シンボリック リンクも同じように機能します。(この説明は Unix ファイルシステム ビューに偏っていますが、DOS/Windows ビューはほとんど同じように機能すると思います)。任意のディレクトリ内には、メンバーの名前のセットがあり、ファイルシステムは、ディレクトリが特定の名前を持つメンバーを 1 つだけ持つことができるという一意性の制約を適用します。

Java メソッド名をフィールド名と比較して考えると、C に戻って、オブジェクト ファイル内のすべてのシンボルが単一の名前空間にあるため、同じ名前のグローバル関数とグローバル変数を持つことはできませんでした。しかし、関数 "void foo()" がマングルされたシンボル名 ("foo__vv" など) にマップされていたため、C++ では可能でした。したがって、名前空間へのキーがフィールド「foo」とメソッド「foo()」で異なるため、個別の名前空間を持つことはあまりありません。キーの衝突を取得できないため、別の名前空間のように見えますが、実際に実装されているのでしょうか?

于 2009-05-31T13:19:23.160 に答える