Frage

Dateien und Verzeichnisse können verschiedene Namensräume haben, und immer noch verwendet werden, um bestimmte Dateien zu identifizieren, da eine Datei und das Verzeichnis mit dem gleichen Namen, indem sie verschiedene Arten von Dingen unterschieden werden können.

Primitive Feld und Referenzfelder könnten auch unterschiedliche Namensräume (in Java), denn wenn ein primitiven und ein Referenzfeld den gleichen Namen hat, können sie, indem sie verschiedene Arten von Dingen identifiziert werden.

Separate Namespaces werden an anderer Stelle wie folgt verwendet. Zum Beispiel in Java, können Sie eine Methode exampleName() und ein Feld exampleName haben, und obwohl sie die gleichen Namen haben, werden sie sich durch verschiedene Arten von Dingen zu sein.

War es hilfreich?

Lösung

Ich glaube nicht, dass dies eine gute Idee sein. Ich stelle mir vor, dass die Gründe Dinge wie Leistung und Einfachheit des Dateisystem-Code einzubinden. Wenn eine Verzeichnis-Liste gehen musste um 2 oder 3 oder mehr verschiedene Wege, je nachdem wie viele verschiedene Namespaces Sie denken, Sie haben sollten, würde dies wahrscheinlich den Code erschweren.

Darüber hinaus betrachten die Endbenutzer Verwirrung, die entstehen könnten. Derzeit haben wir eine Art unter Verwendung von Dateierweiterungen in Dateisystemen verfügbar Namensräume. Sie können datei.txt und file.dll haben und alle existant im selben Verzeichnis file.exe. Was passiert, wenn diese Dateien vorhanden sind, ist gleichzeitig ein Anliegen - dies ist eine Methode gewesen für Virenschreiber eine Form von Social Engineering zu verwenden, um Sie über die falsche Datei klicken, zu erhalten. Stellen Sie sich vor, wenn Sie auch ein Verzeichnis mit einer Datei mit dem gleichen Namen verwechselt werden könnten?

Andere Tipps

Erstens ist diese Frage sprachspezifisch. In der reinen OOP-Sprachen gibt es keinen Unterschied zwischen atomaren und Verbundelementen. Alles ist ein Objekt. Mit einem ähnlichen Grund in einer reinen funktionalen Sprache kann man nicht haben Funktion und Variable denselben Namen.

Zweitens, wenn Sie polymorphe Operationen haben, gibt es keine Möglichkeit zu sagen, welche Variable haben Sie sich beziehen. Zum Beispiel können Sie nicht verschiedene Namensräume für Dateien und Verzeichnisse haben, weil der polymorphen Operationen, wie

cp foo bar

Die cp arbeitet auf Dateien und Verzeichnisse, und wenn man verschiedene Namensräume haben, gibt es keine Möglichkeit zu sagen, was hast du meinst.

Verzeichnisse und Dateien sind nicht unbedingt so anders. Sie sind beiden Einträge in ihrem übergeordneten Verzeichnis, nur mit einer Flagge, um anzuzeigen, ob ein Eintrag ein Verzeichnis ist oder nicht. Sie können ein Verzeichnis öffnen und lesen, als ob es sich um eine Datei war, nur, dass bestimmte andere Operationen möglich sind, auf it- symbolische Links auf die gleiche Weise arbeiten. (Diese Beschreibung ist auf Unix-Dateisystem-Ansicht voreingenommen, aber ich denke, die DOS / Windows Ansicht die gleiche Weise funktioniert). Innerhalb von einem beliebigen Verzeichnis gibt es eine Reihe von Namen von Mitgliedern, und das Dateisystem erzwingt die Eindeutigkeit Einschränkung, dass ein Verzeichnis nur ein Mitglied mit einem bestimmten Namen hat.

Das Nachdenken über Java Methodennamen im Vergleich zu Feldnamen --- zurück in C, könnten Sie nicht eine globale Funktion und globalen Variable mit dem gleichen Namen haben, weil alle Symbole in der Objektdatei in einem einzigen Namensraum sind. Aber man konnte mit C ++, da eine Funktion „void foo ()“ zu verstümmelten Symbolnamen zugeordnet wurde ( „foo__vv“ oder etwas). Also ist es nicht so sehr, dass sie einen eigenen Namensraum hat, als dass der Schlüssel in den Namensraum für ein Feld „foo“ vs einem Verfahren unterscheidet „foo ()“. Vorausgesetzt, dass Sie keine Schlüssel Auseinandersetzungen bekommen können, sehen sie aus wie eigenen Namensraum, aber ist das wirklich, wie es umgesetzt wird?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top