2016-03-27 3 views
-1

Когда я запускаю этот код и не выдаю никаких сообщений при запросе на lname, тогда условие if оценивается как true и выполняет строку println!("lname is empty");, но почему нет debug_assert что-нибудь напечатать?Почему `debug_assert` ничего не печатает, если первый аргумент является истинным?

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); 
} 

Кроме того, это затенение предыдущей переменной p удалить строку разрывы строк в конце хороший способ сделать это?

+0

[Сообщение с несколькими вопросами или несколькими сообщениями?] (Http://meta.stackexchange.com/q/39223/281829) – Shepmaster

ответ

1

Потому что это то, что он должен делать? От documentation of debug_assert!

Убедитесь, что логическое выражение истинно во время выполнения.

Это вызовет панику! макрос, если предоставленное выражение не может быть оценено как true во время выполнения.

И вы сказали

условие if вычисляет true

Поскольку условие истинно, и утверждение гарантирует, что оно истинно, то утверждение не подведет.