Skip to content

Commit 563a478

Browse files
committed
Tutorials - Translation PT-BR - Implicit Conversions
1 parent 0ce3cb8 commit 563a478

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
---
2+
layout: tutorial
3+
title: Conversões Implícitas
4+
5+
disqus: true
6+
7+
tutorial: scala-tour
8+
num: 26
9+
tutorial-next: polymorphic-methods
10+
tutorial-previous: implicit-parameters
11+
language: pt-br
12+
---
13+
14+
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.
15+
16+
As conversões implícitas são aplicadas em duas situações:
17+
18+
* Se uma expressão `e` for do tipo`S` e `S` não estiver em conformidade com o tipo esperado `T` da expressão.
19+
* Em uma seleção `e.m` com `e` do tipo `T`, se o seletor `m` não representar um membro de `T`.
20+
21+
No primeiro caso, é procurada uma conversão `c` que seja aplicável a `e` e cujo tipo de resultado esteja em conformidade com `T`.
22+
23+
No segundo caso, é procurada uma conversão `c` que seja aplicável a `e` e cujo resultado contém um membro chamado `m`.
24+
25+
A seguinte operação nas duas listas xs e ys do tipo `List[Int]` é válida:
26+
27+
```
28+
xs <= ys
29+
```
30+
31+
Assuma que os métodos implícitos `list2ordered` e` int2ordered` definidos abaixo estão no mesmo escopo:
32+
33+
```
34+
implicit def list2ordered[A](x: List[A])
35+
(implicit elem2ordered: A => Ordered[A]): Ordered[List[A]] =
36+
new Ordered[List[A]] { /* .. */ }
37+
38+
implicit def int2ordered(x: Int): Ordered[Int] =
39+
new Ordered[Int] { /* .. */ }
40+
```
41+
42+
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.
43+
44+
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:
45+
46+
```tut
47+
import scala.language.implicitConversions
48+
49+
implicit def int2Integer(x: Int) =
50+
java.lang.Integer.valueOf(x)
51+
```
52+
53+
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.

0 commit comments

Comments
 (0)