Uma conversão implícita do tipo S para o tipo T é definida por um valor implícito que tem o tipo de função S => T, ou por um método implícito convertível em um valor de tal tipo.
As conversões implícitas são aplicadas em duas situações:
- Se uma expressão
efor do tipoSeSnão estiver em conformidade com o tipo esperadoTda expressão. - Em uma seleção
e.mcomedo tipoT, se o seletormnão representar um membro deT.
No primeiro caso, é procurada uma conversão c que seja aplicável a e e cujo tipo de resultado esteja em conformidade com T.
No segundo caso, é procurada uma conversão c que seja aplicável a e e cujo resultado contém um membro chamado m.
A seguinte operação nas duas listas xs e ys do tipo List[Int] é válida:
xs <= ys
Assuma que os métodos implícitos list2ordered e int2ordered definidos abaixo estão no mesmo escopo:
implicit def list2ordered[A](x: List[A])
(implicit elem2ordered: A => Ordered[A]): Ordered[List[A]] =
new Ordered[List[A]] { /* .. */ }
implicit def int2ordered(x: Int): Ordered[Int] =
new Ordered[Int] { /* .. */ }
O objeto implicitamente importado scala.Predef declara vários tipos predefinidos (por exemplo, Pair) e métodos (por exemplo, assert), mas também várias conversões implícitas.
Por exemplo, ao chamar um método Java que espera um java.lang.Integer, você está livre para passar um scala.Int em vez disso. Isso ocorre porque Predef inclui as seguintes conversões implícitas:
import scala.language.implicitConversions
implicit def int2Integer(x: Int): Integer =
Integer.valueOf(x)
Para definir suas próprias conversões implícitas, primeiro você deve importar scala.language.implicitConversions (ou invocar o compilador com a opção -language: implicitConversions). Tal recurso deve ser explicitamente habilitado porque pode se tornar complexo se usado indiscriminadamente.
Contributors to this page:
Contents
- Introdução
- Basics
- Tipos Unificados
- Classes
- Parâmetro com Valor Padrão
- Parâmetros Nomeados
- Traits
- Tuplas
- Composição de Classes Mixin
- Funções de ordem superior
- Funções Aninhadas
- Currying
- Classes Case
- Correspondência de Padrões
- Objetos Singleton
- Padrões de Expressões Regulares
- Objetos Extratores
- For Comprehensions
- Classes Genéricas
- Variâncias
- Limitante Superior de Tipos
- Limitante Inferior de Tipos
- Classes Internas
- Tipos Abstratos
- Tipos Compostos
- Auto Referências Explicitamente Tipadas
- Parâmetros Implícitos
- Conversões Implícitas
- Métodos Polimórficos
- Inferência de Tipo Local
- Operadores
- By-name Parameters
- Anotações
- Packages and Imports
- Package Objects