Tipos Compostos
| Tipos | Literais | |
|---|---|---|
| Matrizes | [T; N] | [20, 30, 40], [0; 3] |
| Tuplas | (), (T,), (T1, T2), … | (), ('x',), ('x', 1.2), … |
Atribuição e acesso a matrizes:
fn main() { let mut a: [i8; 10] = [42; 10]; a[5] = 0; println!("a: {:?}", a); }
Atribuição e acesso a tuplas:
fn main() { let t: (i8, bool) = (7, true); println!("1º índice: {}", t.0); println!("2º índice: {}", t.1); }
Pontos chave:
Vetores:
-
O valor do tipo matriz
[T; N]comportaNelementos (constante em tempo de compilação) do mesmo tipoN. Note que o tamanho de uma matriz é parte do seu tipo, o que significa que[u8; 3]e[u8; 4]são considerados dois tipos diferentes. -
Nós podemos usar literais para atribuir valores para matrizes.
-
Na função
main, o comandoprintpede a implementação de depuração (debug) com o parâmetro de formato formato?:{}produz a saída padrão,{:?}produz a saída de depuração. Nós também poderíamos ter usado{a}e{a:?}sem especificar o valor depois da string de formato. -
Adicionando
#, p.ex.{a:#?}, invoca um formato “pretty printing” (“impressão bonita”), que pode ser mais legível.
Tuplas:
-
Assim como matrizes, tuplas têm tamanho fixo.
-
Tuplas agrupam valores de diferentes tipos em um tipo composto.
-
Campos de uma tupla podem ser acessados com um ponto e o índice do valor, e.g.
t.0,t.1. -
A tupla vazia
()também é conhecida como “tipo unidade” (unit type). É tanto um tipo quanto o único valor válido desse tipo - ou seja, o tipo e seu valor são expressos como(). É usado para indicar, por exemplo, que uma função ou expressão não tem valor de retorno, como veremos em um slide futuro.- Você pode pensar nisso como um
void, que talvez lhe seja familiar de outras linguagens de programação.
- Você pode pensar nisso como um