Scala implicitamente

Scala implicitamente
“Todo mundo aprendendo ou adotando a linguagem do computador Scala eventualmente encontra o identificador implicitamente. No entanto, relativamente poucos levam um tempo para compreender totalmente seu significado. Este guia analisará, portanto, a semântica e os principais usos da função implicitamente. Funciona implicitamente essencialmente como um “compilador para implícitos.“Se um tipo de valor implícito do tipo“ T ”existir, podemos confirmar. O compilador nos notificará sobre a situação se não houver um valor implícito do tipo "T" disponível no escopo. Esta é uma opção útil que precisamos determinar se o valor de um tipo específico é acessível em escopo implícito.”

Sintaxe da palavra -chave implicitamente.04

Para construir exemplos explícitos e concretos de disponibilidade de tipos, um método de utilidade está incluído na Biblioteca Padrão Scala. Além disso, implícito é o nome do método. Observe que a versão 2 do Scala 2.8 Introduz implicitamente, descrito em Prefef como:

def implicitamente [t] (implícito e: t) = e

Exemplo # 1: Programa de palavra -chave implicitamente Scala no Ubuntu 20.04

Aqui está uma breve ilustração da apresentação dos retrônimos:

Para o modo Scala Repl, chamamos a variável "x" com uma palavra -chave implícita e a inicializamos com a string. Especificamos um valor implícito da string digitada. O tipo é retornado quando a linha de código é executada. Depois disso, procuramos o valor implícito da string digitada, passando -o na função implicitamente e depois o atribuímos à variável "y". O compilador retornou o valor da string "Demo", pois armazenava este valor. Em seguida, encontramos o valor implícito do tipo "int" e o colocamos dentro da variável "z". Na compilação, gera um erro "não conseguiu encontrar o valor implícito para o parâmetro int".

Exemplo # 2: Programa de compreender e resolver um problema de visualizações implícitas em Scala no Ubuntu 20.04

Quando o prefixo de uma seleção (por exemplo, o.prefixo.A seleção (ARGS) não possui uma seleção de membros aplicáveis ​​ao args) está vazia, uma visão implícita pode ser acionada (mesmo depois de tentar converter os argumentos usando as visualizações implícitas). Quando isso acontece, o compilador procura membros implícitos que sejam semelhantes a métodos ou funções implícitos de um tipo com uma seleção declarada, declarada localmente na corrente, ou escopos fechados, herdados ou importados.

Aqui, passamos o valor "3" dentro do 1.min () como "int" não tem definição de min. O resultado do resultado gera o valor "1". Em seguida, usamos a palavra -chave implicitamente para o int, que tem a definição Min. Retornou o tipo implícito "int" como . Depois disso, executamos o RES2 (1), que localizará o valor implícito presente na definição de AnyRef. No final, usamos o .Método GetClass, que devolveu o Scala.tempo de execução.Richint Class.

Além disso, quando uma expressão se desvia do tipo esperado, vistas implícitas podem ser acionadas, como mostrado abaixo:

Nós atribuímos o scala.tempo de execução.Richint Declaração para o valor "1" que na execução forneceu o valor implícito "1"

Esta função é exigida pelo compilador neste caso:

O scala.tempo de execução.Richint é então atribuído ao tipo int dentro da função implicitamente e fornece a saída como saída.

Exemplo # 3: Programa de acesso a um parâmetro implícito induzido pelo contexto Scala no Ubuntu 20.04

Os parâmetros implícitos de Scala podem até ser mais significativos do que suas visões implícitas. Eles são compatíveis com o padrão de classe. Isso é utilizado esporadicamente na biblioteca padrão; Veja Scala como a ordem é empregada em seq -like#classificada. Manifestos de matriz e objetos canbuildfrom também são passados ​​usando parâmetros implícitos.

Limites de contexto é uma sintaxe de atalho que Scala 2.8 ofertas para argumentos implícitos. Em poucas palavras, um método que exige uma entrada implícita do tipo y [x]

O parâmetro implícito é passado, mas não é nomeado. Ao aplicar o método foo, exatamente isso pode ser útil? É comum que o parâmetro implícito seja enviado como um parâmetro implícito para outra função que é chamada, em vez de ter que ser explicitamente mencionado. Para materializar o valor, você pode chamar implicitamente, mantendo a definição concisa do método com o contexto limitado.

Exemplo # 4: Programa de dar contribuição explícita a uma parte dos parâmetros implícitos Scala no Ubuntu 20.04

Considere o seguinte cenário ao utilizar uma abordagem baseada em classe e invocar um método que imprime um detalhe do aluno:

Definimos o traço de Scala "Display", que tem a definição da tela, pois leva o tipo "T" e atribui o valor "1" a ele. Em seguida, criamos o objeto "exibição" onde as funções implícitas são estabelecidas. A primeira função implícita é declarada como "intdisplay", que tem a definição "int". Esta função é definida com a nova palavra -chave para a tela [int], que retornará a representação da string.

Em seguida, estabelecemos outra função implícita como "StringDisplay" para a definição de string. Em seguida, temos a função "MyStringDisplay", que tem a ToupPercase para a conversão em maiúsculas. Depois disso, construímos a classe de caso "aluno" e definimos seus atributos "nome" com o tipo de dados "string" e "idade" com o tipo "int".

Implementamos o objeto "aluno", dentro do qual a função implícita de "StudentDisplay" é definida. A função atribuiu duas variáveis, "DI" para exibição inteira e "ds" para a exibição de string. Essa função implícita tem uma função aninhada "Display", que cria o objeto "S" para a aula "Student". O ds.a tela leva a entrada “S.nome ”e o di.a tela leva o “S.parâmetro de idade ”. Por fim, a variável “S” define os valores dos atributos “Nome” e “Age” para a classe “aluno”. Com a função implicitamente, exibimos os valores de "aluno".

O Scala Repl Res6 exibiu os resultados dos valores implícitos da classe “aluno” da seguinte forma:

O que acontece se desejarmos alterar como o nome é o resultado? Embora possamos usar diretamente o StudentDisplay e fornecer uma tela diferente [String], preferimos que o compilador passe na tela [int].

Os seguintes resultados são obtidos se empregarmos a parte acima da linha no código anterior.

Conclusão

Neste post, discutimos a função implicitamente, que faz parte do Scala desde a versão 2.8. Primeiro, começamos a demonstrar o papel fundamental da função como um "compilador para implícito". Esse método implicitamente apenas antecipa um parâmetro de tipo, localiza o valor implícito presente no escopo, convoca -o e o devolve. A técnica extremamente básica deve ser usada implicitamente pelos seguintes motivos.