Pergunta

Arquivos e diretórios podem ter diferentes namespaces, e ainda ser usado para identificar arquivos específicos, porque um arquivo e diretório com o mesmo nome pode ser distinguido por ser diferentes tipos de coisas.

campo primitivo de referência e campos também pode ter namespaces diferentes (em Java), porque se um campo primitivo e uma referência tinha o mesmo nome, eles poderiam ser identificados por serem diferentes tipos de coisas.

namespaces separados são usados ??em outros lugares como este. Por exemplo, em Java, você pode ter um exampleName() método e um exampleName campo, e apesar de terem o mesmo nome, eles são distinguidos por serem diferentes tipos de coisas.

Foi útil?

Solução

Eu não acredito que isso seria uma boa idéia. Imagino que as razões envolvem coisas como o desempenho e simplicidade do código do sistema de arquivos. Se um diretório anúncio tive que ir até 2 ou 3 ou mais caminhos diferentes, dependendo de quantos namespaces diferente você acha que você deve ter, este seria provavelmente complicar o código.

Além disso, considere a confusão usuário final que possa surgir. Atualmente, temos uma espécie de namespacing disponível em sistemas de arquivos usando extensões de arquivo. Você pode ter file.txt e .dll e file.exe todos foram inexistentes no mesmo diretório. O que acontece quando esses arquivos estão presentes ao mesmo tempo é uma questão de preocupação - este tem sido um método para os criadores de vírus para usar uma forma de engenharia social para levá-lo a clicar sobre o arquivo errado. Imagine se você pudesse confundir um diretório com um arquivo de mesmo nome também?

Outras dicas

Em primeiro lugar, esta pergunta é específica da linguagem. Em linguagens OOP puros não há nenhuma distinção entre elementos atômicos e compostos. Tudo é um objeto. Por uma razão semelhante em uma linguagem funcional pura você não pode ter função e variável chamada o mesmo.

Em segundo lugar, se você tem operações polimórficas, não há nenhuma maneira de saber qual variável que você se refere. Por exemplo, você não pode ter diferentes namespaces para arquivos e diretórios, por causa das operações polimórficas, como

cp foo bar

O cp funciona em arquivos e diretórios, e se você tem diferentes namespaces, não há nenhuma maneira de dizer o que você quer dizer.

Os diretórios e arquivos não são necessariamente tão diferente. Ambos são entradas no diretório pai, apenas com uma bandeira para indicar se uma entrada é um diretório ou não. Você pode abrir um diretório e lê-lo como se fosse um arquivo, só que certas outras operações são possíveis no ele- links simbólicos funcionam da mesma maneira. (Esta descrição é inclinado para o ponto de vista do sistema de arquivos Unix, mas acho que a visão DOS / Windows funciona da mesma forma). Dentro de qualquer diretório, há um conjunto de nomes de membros, eo sistema de arquivos impõe a restrição de exclusividade que um diretório só pode ter um membro com um determinado nome.

Thinking sobre nomes de métodos Java em comparação com os nomes de campo --- volta em C, você não poderia ter uma função global e variável global com o mesmo nome, porque todos os símbolos no arquivo objeto estão em um único namespace. Mas você poderia com C ++, porque uma função "void foo ()" foi mapeado para o nome do símbolo mutilado ( "foo__vv" ou algo assim). Portanto, não é tanto que eles têm um namespace separado, como que a chave para o namespace é diferente para um campo "foo" vs um método "foo ()". Dado que você não pode obter confrontos-chave, eles se parecem com namespaces separados, mas é que realmente como ele é implementado?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top