2016-03-27 12 views
-1

lnameを要求されたときにこのコードを実行して入力を与えないと、ifの条件はtrueと評価され、println!("lname is empty");という行が実行されますが、debug_assertは何も印刷されません。最初の引数がtrueのときに `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

[複数の質問または複数の投稿を含む1つの投稿?](http://meta.stackexchange.com/q/39223/281829) – Shepmaster

答えて

1

それはそれが何をすべきなのでしょうか? documentation of debug_assert!

実行時にブール式が真であることを確認してください。

これはパニックを引き起こします!実行時に提供された式をtrueに評価できない場合はマクロを使用します。

そして、あなたは

if条件は、条件が真である、と主張は、それが真実であることを保証しますので、その後、アサーションが失敗しないtrue

に評価されました。

関連する問題