从Option <&str>转换为Option <String>

mar*_*usz 6 rust

转换Option<&str>为最佳做法是什么Option<String>?严格来说,我正在寻找一个简洁的等价物:

if s.is_some() {
    Some(s.to_string())
} else {
    None
}
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最好的:

s.and_then(|s| Some(s.to_string()))
Run Code Online (Sandbox Code Playgroud)

Fra*_*gné 8

map 是一个更好的选择:

s.map(|s| s.to_string())
Run Code Online (Sandbox Code Playgroud)

要么

s.map(str::to_string)
Run Code Online (Sandbox Code Playgroud)


Nik*_*ird 5

另一种方法是使用s.map(str::to_string)

let reference: Option<&str> = Some("whatever");
let owned: Option<String> = reference.map(str::to_string);
Run Code Online (Sandbox Code Playgroud)

我个人觉得它更干净,没有额外的封闭。