55 lines
1.3 KiB
Markdown
55 lines
1.3 KiB
Markdown
# 11. Tuples
|
|
|
|
## 11.1 Nature — V1 REQUIS — FIGÉ
|
|
|
|
Un tuple est un type structurel anonyme, hétérogène, d'arité fixe.
|
|
|
|
Il n'a pas de `.saseltype`.
|
|
|
|
```text
|
|
(int32, String)
|
|
```
|
|
|
|
`(T)` est un groupement, pas un tuple à un élément.
|
|
|
|
Il n'existe pas de tuple `()` ; `Void` exprime l'absence de valeur.
|
|
|
|
Arity minimale : 2.
|
|
|
|
## 11.2 Champs — V1 REQUIS — FIGÉ
|
|
|
|
Les tuples ne possèdent pas de noms de membres persistants.
|
|
|
|
Si des champs nommés stables sont nécessaires, utiliser une `struct`.
|
|
|
|
La déstructuration peut nommer des variables locales :
|
|
|
|
```text
|
|
(int32 id, String name) = value;
|
|
```
|
|
|
|
Ces noms ne changent pas le type du tuple.
|
|
|
|
## 11.3 Indexation — V1 REQUIS — FIGÉ
|
|
|
|
Accès positionnel :
|
|
|
|
```text
|
|
tuple[0]
|
|
tuple[1]
|
|
```
|
|
|
|
L'index doit être une constante connue à la compilation puisque le type de retour peut varier suivant la position.
|
|
|
|
Le tuple n'implémente donc pas un `OpIndex<uint64,T>` homogène ordinaire.
|
|
|
|
## 11.4 Égalité/comparaison intrinsèque — V1 REQUIS — FIGÉ
|
|
|
|
Si tous les éléments permettent l'égalité pertinente, le tuple peut être comparé composant par composant.
|
|
|
|
Si tous les éléments sont comparables, l'ordre du tuple est lexicographique.
|
|
|
|
Si un composant comparé retourne `PartialOrdering::Unordered`, le résultat de comparaison du tuple est `PartialOrdering::Unordered`.
|
|
|
|
---
|