接受 &str 或移动 String 而无需复制的通用函数

9
我希望编写一个通用函数,可以接受任何类型的字符串(&str/String),以方便调用者使用。
该函数内部需要一个 String,因此如果调用者使用 String 调用函数,则我也希望避免不必要的重新分配。
foo("borrowed");
foo(format!("owned"));

我知道可以使用foo<S: AsRef<str>>(s: S)来接受引用,但是如何处理其他情况呢?

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

1个回答

14

我认为你想要实现的可以用Into trait来实现,例子如下:

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

fn main () {
    foo("borrowed");
    foo(format!("owned"));
}

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