Question

Les fichiers et répertoires peuvent avoir différents espaces de noms, et encore être utilisés pour identifier les fichiers spécifiques, car un fichier et le répertoire avec le même nom se distinguent en étant différentes sortes de choses.

champs primitifs et les champs de référence pourraient aussi différents espaces de noms (en Java), parce que si une primitive et un champ de référence avait le même nom, ils pourraient être identifiés en étant différentes sortes de choses.

espaces de noms distincts sont utilisés ailleurs comme celui-ci. Par exemple, en Java, vous pouvez avoir une exampleName() méthode et un exampleName sur le terrain, et si elles ont le même nom, ils se distinguent en étant différentes sortes de choses.

Était-ce utile?

La solution

Je ne crois pas que ce serait une bonne idée. Je suppose que les raisons impliquent des choses comme la performance et la simplicité du code du système de fichiers. Si une liste de répertoire devait descendre 2 ou 3 ou plusieurs chemins différents selon le nombre de différents espaces de noms que vous pensez que vous devriez avoir, cela compliquerait probablement le code.

En outre, tenir compte de la confusion chez l'utilisateur final qui pourrait survenir. À l'heure actuelle, nous avons une sorte de disponible dans des espaces de noms des systèmes de fichiers en utilisant les extensions de fichier. Vous pouvez avoir file.txt et file.dll et FILE.EXE tous dans le même existant répertoire. Ce qui se passe lorsque ces fichiers sont présents en même temps est un sujet de préoccupation - cela a été une méthode pour les auteurs de virus à utiliser une forme d'ingénierie sociale pour vous faire cliquer sur le mauvais fichier. Imaginez si vous pouviez confondre un répertoire avec un fichier du même nom ainsi?

Autres conseils

Tout d'abord, cette question est spécifique à la langue. En pur langues POO il n'y a pas de distinction entre les éléments atomiques et composés. Tout est un objet. Par une raison similaire dans un langage fonctionnel pur, vous ne pouvez pas avoir la fonction et variable le même nom.

En second lieu, si vous avez des opérations polymorphes, il n'y a aucun moyen de dire quelle variable avez-vous allusion. Par exemple, vous ne pouvez pas avoir des espaces de noms pour les fichiers et répertoires, en raison des opérations polymorphes, comme

cp foo bar

Le cp fonctionne sur les fichiers et répertoires, et si vous avez différents espaces de noms, il n'y a aucun moyen de dire qu'est-ce que vous voulez dire.

Les répertoires et fichiers ne sont pas nécessairement différents. Ils sont les deux entrées dans leur répertoire parent, juste avec un drapeau pour indiquer si une entrée est un répertoire ou non. Vous pouvez ouvrir un répertoire et de le lire comme si elle était un fichier, que certaines autres opérations sont possibles sur IT- les liens symboliques fonctionnent de la même façon. (Cette description est biaisée vers le point de vue du système de fichiers Unix, mais je pense que la vue DOS / Windows fonctionne de la même manière). A l'intérieur d'annuaire, il y a un ensemble de noms de membres, et le système de fichiers impose la contrainte d'unicité qu'un répertoire ne peut avoir qu'un seul membre avec un nom donné.

Réflexion sur les noms Java méthode par rapport aux noms de champ --- retour en C, on ne peut pas avoir une fonction globale et variable globale du même nom, parce que tous les symboles dans le fichier objet sont dans un seul espace de noms. Mais vous pourriez avec C ++, parce qu'une fonction « void foo () » a été mis en correspondance avec le nom de symbole mutilée ( « foo__vv » ou quelque chose). Donc, ce n'est pas tellement qu'ils ont un espace de noms distinct, comme que la clé dans l'espace de noms est différent pour un champ « foo » vs une méthode « foo () ». Étant donné que vous ne pouvez pas obtenir des affrontements clés, ils ressemblent à des espaces de noms séparés, mais est-ce vraiment la façon dont il est mis en œuvre?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top