// errors1.rs // 假使你传给这个函数一个空字符串,那么它将拒绝生成一段个性签名(nametage)。 // 如果它能解释拒绝的原因是什么,而不是粗暴返回 `None` 那就更完美了。 // 第 2 个测试目前还没通过并未能编译,但它说明了我们希望这个函数具有的行为。 // 执行 `rustlings hint errors1` 获取提示! // I AM NOT DONE pub fn generate_nametag_text(name: String) -> Option {// 译:生成个性签名 if name.len() > 0 { Some(format!("Hi! My name is {}", name))// 译:"嗨!我的名字是 {}" } else { // 不允许使用空的名字。 None } } #[cfg(test)] mod tests { use super::*; // 你可以注释掉第 2 个测试,那么这个测试就能初步通过。 // 当你更改了测试的函数时,也需要修改下测试代码以使测试正确! #[test] fn generates_nametag_text_for_a_nonempty_name() {// 译:用一个非空名称生成一段个性签名 assert_eq!( generate_nametag_text("Beyoncé".into()), Some("Hi! My name is Beyoncé".into()) ); } #[test] fn explains_why_generating_nametag_text_fails() {// 译:说明为什么个性签名生成失败了 assert_eq!( generate_nametag_text("".into()), Err("`name` was empty; it must be nonempty.".into()) ); } }