Na minha opinião, uma das maiores coisas sobre o Scala é sua interoperabilidade com Java e sua sintaxe semelhante. Uma coisa que achei estranha é o uso do _
operador para importação de pacotes wilcard em vez do *
operador usado em Java.
Existe uma razão técnica para usar em _
vez de *
? Caso contrário, por que essa alteração foi feita?
Respostas:
No Scala, o
*
é um identificador válido. Alguém poderia escrever:Com o resultado sendo:
Pode-se escrever uma classe chamada
*
assim:Sendo assim, quando eu tenho uma classe
*
no pacoteus.hexcoder
e escrevo:Você estaria dizendo que deseja importar uma classe com o nome
*
. Por esse motivo, o Scala precisava usar outro símbolo para indicar uma importação de curinga. Por qualquer motivo, eles decidiram usar_
como símbolo curinga.fonte
*
precisava ser incluída para multiplicação. Portanto, outro caractere menos comum precisava ser escolhido como caractere reservado.Nas linguagens funcionais, o caractere _ é comumente usado para dizer "não me importo com esse parâmetro" ou "qualquer coisa pode ser usada aqui". Estender esse valor às importações de namespace apenas faz sentido.
fonte
Além da resposta de Glenn,
import
há uma declaração válida em qualquer lugar do Scala e você podeimport
incluir um objeto ou uma instância no escopo. Como*
é obviamente um membro de muitas classes, ele não pode ser usado como curinga para aimport
instrução. Então você acaba com uma string que não deve ser um identificador válido._
vem à mente. O fato de ser usado em outros lugares para um significado diferente (tipo existencial, funcionar como uma instância) também se deve ao mesmo problema.fonte
Em Scala, existem dezenas de lugares onde o sublinhado é usado. Usá-lo para importações de curingas é apenas uma consequência lógica.
fonte