2017-10-16 13 views
1

J'apprends la rouille et je suis arrivé au chapitre sur les limites des traits. Dans ce chapitre, ils donnent un exemple avec l'opérateur + (plus) pour énumérer tous les caractères requis dans une clause where.Quels sont les opérateurs possibles pour les traits dans une clause where dans Rust?

Quels sont les autres opérateurs autorisés sur les traits de Rust? J'ai cherché mais je n'ai pas pu trouver de documentation à ce sujet. Est-ce que Rust supporte la notation 'ou', les parenthèses, la négation?

Répondre

4

« ou » notation

Non Une telle chose n'a pas de sens pour moi - ce serait le code faire si quelque chose pourrait être A OU B?

supports

Non, sauf si vous comptez la parenthèse dans Fn(...) et les amis, l'utilisation de crochets comme génériques (Vec<T>) ou l'utilisation de crochets en tranches ([u8]), mais ceux-ci sont parties de types.

Encore une fois, une telle demande n'a pas de sens pour moi, pourquoi auriez-vous besoin de n'importe quel type de regroupement?

négation

Non, je crois que cela est dû au fait que la manipulation logique négative rend les choses beaucoup plus compliquées.

autres opérateurs

There's the ? (question mark) bound. Source: J'ai écrit a parser of Rust code. Bien que ce soit possible, j'ai raté quelque chose, il analyse tous les fichiers ~ 37500 Rust que j'ai jetés, donc c'est un bon ajustement.

+0

Que vous. Je pense que si Rust supporte les traits optionnels, on peut créer un opérateur 'ou' en tant que? Trait1 +? Trait2. Ou pas? –

+0

@GeorgeShuklin Rust ** ne prend pas en charge les caractères facultatifs. Le '?' (Point d'interrogation) ne s'applique qu'au trait spécifique 'Sized'. Pour l'ergonomie, chaque type générique a une limite implicite de 'T: Sized' * à moins que * vous supprimiez cette limite par défaut en utilisant '? Sized'. – Shepmaster