通用函数接受&str或移动String而不复制

Kor*_*nel 8 generics ownership-semantics rust

我想编写一个通用函数,它接受任何类型的字符串(&str/ String)以方便调用者.

函数内部需要a String,所以如果调用者调用函数,我也想避免不必要的重新分配String.

foo("borrowed");
foo(format!("owned"));
Run Code Online (Sandbox Code Playgroud)

接受参考我知道我可以使用foo<S: AsRef<str>>(s: S),但另一种方式呢?

我认为基于的泛型参数ToOwned可能有用(适用于&str,我假设它是无操作String),但我无法弄清楚确切的语法.

Flo*_*mer 10

我认为你所追求的是可以用这个Into特性实现的,就像这样:

fn foo<S: Into<String>>(s: S) -> String {
    return s.into();
}

fn main () {
    foo("borrowed");
    foo(format!("owned"));
}
Run Code Online (Sandbox Code Playgroud)