当第一个参数为真时,为什么不调试debug_assert`?

时间:2016-03-27 19:03:54

标签: rust

当我运行此代码并在被要求lname时没有提供任何输入时,if条件评估为true并执行第println!("lname is empty");行,但为什么不{ {1}}打印什么?

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); } 以删除最后的换行符,这是一个很好的方法吗?

1 个答案:

答案 0 :(得分:1)

因为它应该做什么?来自documentation of debug_assert!

  

确保在运行时布尔表达式为真。

     

这会引起恐慌!如果提供的表达式在运行时无法计算为true,则为宏。

你说

  

if条件评估为true

因为条件为真,并且断言确保它为真,那么断言不会失败。