我正在尝试用一种简单的方式来做到这一点,或者一种不那么丑陋和不那么重复的方式:
fn class_requirements(current_class: Model) -> String {
return format!(
"
Required Race: {}
Required Weapon Proficiency: {}
",
match current_class.req_race {
Some(race) => race,
None => String::from("None"),
},
match current_class.req_weapon_proficiency {
Some(prof) => prof,
None => String::from("None"),
}
);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用unwrap_or或unwrap_or_else来解包Option并替换该情况的替代值None:
fn class_requirements(current_class: Model) -> String {
format!(
"
Required Race: {}
Required Weapon Proficiency: {}
",
current_class.req_race.unwrap_or_else(|| String::from("None")),
current_class.req_weapon_proficiency.unwrap_or_else(|| String::from("None")),
)
}
Run Code Online (Sandbox Code Playgroud)
String您可以通过调用as_deref将 an 转换Option<String>为 an 来避免堆分配s Option<&str>。然后"None"可以是静态字符串:
fn class_requirements(current_class: Model) -> String {
format!(
"
Required Race: {}
Required Weapon Proficiency: {}
",
current_class.req_race.as_deref().unwrap_or("None"),
current_class.req_weapon_proficiency.as_deref().unwrap_or("None"),
)
}
Run Code Online (Sandbox Code Playgroud)
(删除显式的return也是一种很好的风格,我已经在上面完成了。)