2016-03-27 4 views
-1

Wenn ich diesen Code ausführen und keine Eingabe bereitstellen, wenn nach lname gefragt wird, dann wird die if Bedingung als wahr ausgewertet und führt die Zeile println!("lname is empty");, aber warum druckt die debug_assert nichts?Warum gibt `debug_assert 'nichts aus, wenn das erste Argument wahr ist?

use std::io; 

struct Test { 
    fname: String, 
    lname: String, 
} 

fn main() { 
    println!("Enter your point!"); 

    println!("Please input fname: "); 

    let mut p = Test { fname: String::new(), lname: String::new() };  

    io::stdin().read_line(&mut p.fname).expect("something went wrong!"); 

    println!("Please input lname: "); 

    io::stdin().read_line(&mut p.lname).expect("something went wrong!"); 

    let p = Test { fname: p.fname.trim().to_string(), lname: p.lname.trim().to_string() }; 

    if p.lname == "" { 
     println!("lname is empty"); 
    } 

    if p.fname == "" { 
     println!("fname is empty"); 
    } 

    debug_assert!(p.lname == "", "Last name is empty"); 

    println!("Full name: {} {}", p.fname, p.lname); 
} 

Zusätzlich wird Shadowing die vorherige Variable p die Zeilen Zeilenumbrüche am Ende eine gute Art und Weise zu entfernen, dies zu tun?

+0

[Ein Beitrag mit mehreren Fragen oder mehrere Beiträge?] (Http://meta.stackexchange.com/q/39223/281829) – Shepmaster

Antwort

1

Weil das ist, was es tun soll?

Stellen Sie sicher, dass ein boolescher Ausdruck zur Laufzeit wahr ist.

Dies wird die Panik auslösen! Makro, wenn der angegebene Ausdruck zur Laufzeit nicht als wahr ausgewertet werden kann.

Und Sie

die if Zustand true

wertet Da die Bedingung erfüllt ist, und die Behauptung stellt sicher, dass es wahr ist, dann ist die Behauptung nicht ausfällt.

Verwandte Themen