我想创建一个id方法,它返回一个id,一个struct属性,或一个新的字符串.
我的归还类型应该是什么?&str用于返回struct属性self.title,但是具有调用范围生命周期的新字符串的返回类型是什么?
fn id(&self) -> &str {
match self.type {
PageType::Type1 => format!("{}-{}", self.title, self.page_num),
PageType::Type2 => &self.title,
}
}
Run Code Online (Sandbox Code Playgroud)
Seb*_*edl 10
您可以通过三种方式实现此目标,并进行不同的权衡.
你返回String并使用self.title.clone().
当您没有理由认为这可能会成为性能问题时使用,并且您希望简单地返回String.
在构造函数中构建它.(按需构建它也是可能的,但会导致复杂的生命周期问题.)返回a &str.几乎没有充分的理由使用&String.
title或page_num领域的改变.如果访问使用非常频繁.
Cow这种类型能够代表借来的或者拥有的东西,并且通过deref强制行为就像借用的东西一样.
fn id(&self) -> Cow<str> {
match self.ty {
PageType::Type1 => Cow::Owned(format!("{}-{}", self.title, self.page_num)),
PageType::Type2 => Cow::Borrowed(&self.title),
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的默认使用,除非你真的想让API保持尽可能简单.