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]
comportaN
elementos (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 comandoprint
pede 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