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

20

如何最佳地将Option<&str>转换为Option<String>?严格来说,我正在寻找一种简洁的等效方法:

if s.is_some() {
    Some(s.to_string())
} else {
    None
}

这是我能想到的最好的方法:

s.and_then(|s| Some(s.to_string()))
2个回答

24

map 是更好的选择:

s.map(|s| s.to_string())
或者
s.map(str::to_string)

7
另一种方法是使用 s.map(str::to_string):
let reference: Option<&str> = Some("whatever");
let owned: Option<String> = reference.map(str::to_string);

我个人认为没有额外的闭合标签更加简洁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接