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
e
for do tipoS
eS
não estiver em conformidade com o tipo esperadoT
da expressão. - Em uma seleção
e.m
come
do tipoT
, se o seletorm
nã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