当我运行此代码并在被要求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);
}
以删除最后的换行符,这是一个很好的方法吗?
答案 0 :(得分:1)
因为它应该做什么?来自documentation of debug_assert!
确保在运行时布尔表达式为真。
这会引起恐慌!如果提供的表达式在运行时无法计算为true,则为宏。
你说
if
条件评估为true
因为条件为真,并且断言确保它为真,那么断言不会失败。