Je dois compter la longueur d'un vecteur de (bool, i32)
où si le bool
est vrai, je compte le nombre d'incréments. J'utilise fois pour ce faire:Utilisation si à l'intérieur du pli
fn main() {
let domain = [(true, 1), (false, 2), (true, 3)];
let dom_count = domain.iter()
.fold(0, |count, &(exists, _)| if exists {count + 1});
println!("dom_count: {}", dom_count);
}
Le compilateur est plaint en disant:
.fold(0, |count, &(exists, _)| if exists {count + 1})
^^^^^^^^^^^^^^^^^^^^^ expected(), found integral variable
Alors j'ai ajouté un ;
et a obtenu ceci:
.fold(0, |count, &(exists, _)| if exists {count + 1;})
^^^^^^^^^^^^^^^^^^^^^^ expected integral variable, found()
Comment utilisez-vous correctement une if
déclaration à l'intérieur de fold
?
Merci. Je n'avais aucune idée que si-déclarations se comportaient comme ça. Aussi je m'excuse du manque de MCVE, je l'ai nettoyé. Sur une note connexe, pourquoi Rust autorise-t-il les lignes simples if à manquer de ';' si elles ne retournent pas de valeur? Par exemple, 'count' est une variable pourquoi compiler:' if true {count = 1} '? Ne devriez-vous pas être obligé d'ajouter un point-virgule: 'if true {count = 1;}'? – HiDefender
@HiDefender * s'ils ne retournent pas une valeur * - ils ** font ** retournent une valeur - la valeur '()' du type '()'. C'est le tuple vide, parfois appelé le "type d'unité". – Shepmaster