我想编写一个接受任何类型字符串(&str
/ String
)的泛型函数,以方便调用者。
该函数内部需要String
,因此如果调用者使用String
调用该函数,我也希望避免不必要的重新分配。
foo("borrowed");
foo(format!("owned"));
接受引用我知道我可以使用foo<S: AsRef<str>>(s: S)
,但另一种方式呢?
我认为基于ToOwned
的通用参数可能有用(适用于&str
,而且我假设它是String
上的无操作),但我无法弄清楚确切的语法。
答案 0 :(得分:10)
我认为您所追求的目标可以通过Into
trait实现,如下所示:
fn foo<S: Into<String>>(s: S) -> String {
return s.into();
}
fn main () {
foo("borrowed");
foo(format!("owned"));
}