IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Rust Discussion :

Erreur de type tuple


Sujet :

Rust

  1. #1
    Membre confirmé Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 125
    Par défaut Erreur de type tuple
    Bonjour à toutes et à tous,

    Je suis en train de développer un petit jeu en utilisant Rust (évidemment), macroqued et l'ECS legion.
    Mon soucis est que je souhaite exécuter une requête qui me renvoie un tuple, mais j'ai une erreur de type.
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    let (request_entity, request_init) = <(Entity, &RequestInit)>::query()
                .iter(ecs)
                .find_map(|(entity, request)| Some((*entity, *request)) );
    et me message d'erreur résultant :
    error[E0308]: mismatched types
        --> src\systems\initialize_district.rs:14:9
         |
    14 |       let (request_entity, request_init) = <(Entity, &RequestInit)>::query()
         | ______^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___-
         | |
         | |         expected enum `Option`, found tuple
    15 | |             .iter(ecs)
    16 | |             .find_map(|(entity, request)| Some((*entity, *request)) );
         | |_____________________________________________________________________- this expression has type `Option<(legion::Entity, components::RequestInit)>`
         |
        = note: expected enum `Option<(legion::Entity, components::RequestInit)>`
                 found tuple `(_, _)`
    Je comprends que rust se plaint que le type n'est pas celui attendu, mais je ne vois pas pourquoi cette erreur.
    J'ai besoin au final d'un tuple (Entity, Option<RequestInit>), sachant que Entity est une structure de legion et RequestInit unitaire est une structure de mon code

    Si quelqu'un a une idée, je suis preneur.
    Merci à tous

  2. #2
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 512
    Par défaut
    Bonjour,

    let (request_entity, request_init) = expression; suppose que l'expression est un tuple à deux éléments.
    Ton appel à find_map ne retrourne pas un tuple, mais une Option, donc c'est normal que le compilateur rejete ton code. Une option de tuple n'est pas un tuple.

    Qu'essaies-tu de faire avec ton itérateur de tuples <(Entity, &RequestInit)>::query().iter(ecs) ? Récupérer le premier tuple s'il y en a au moins ? Traiter les tuples un par un ?

  3. #3
    Membre confirmé Avatar de bringer
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2009
    Messages : 125
    Par défaut
    Bonjour et merci de ta réponse.

    En fait je cherchais bien à obtenir un Option<(Entity, RequestInit)> avec mon find_map et pas un (Entity, requestInit).
    Au final, je ne devais recevoir qu'un seul tuple si il existait ou None et ensuite je testais le résultat avec un traitement dans le cas ou RequestInit existait (soit par match soit par if let).

    Je suis en train de faire un petit jeu d'entrainement en utilisant un ECS (legion en l'occurrence) pour découvrir ce système de gestion des données.

    Au final, j'ai changé l'implémentation de ce morceau de code pour ne plus avoir à tester si RequestInit existe et je scinde la fonction en 2 avec 2 traitements différents et il semble que cela se comporte mieux.

    Ce n'est donc pas vraiment une discussion résolue en terme de code, mais plutôt en terme d'architecture de code.

    En tout cas merci de ton intervention et de ton aide.

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB]erreur de type
    Par amel95140 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2006, 14h51
  2. Réponses: 1
    Dernier message: 12/12/2005, 03h39
  3. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 21h06
  4. erreur Data type mismatch in criteria expression
    Par bachilbouzouk dans le forum ASP
    Réponses: 3
    Dernier message: 20/04/2005, 11h48
  5. [Agents services] Erreur de types imcompatibles
    Par ApollloCrid dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 14/04/2005, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo