generics - 通用函数接受 &str 或移动字符串而不复制

标签 generics rust ownership-semantics

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

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

foo("borrowed");
foo(format!("owned"));

为了接受引用,我知道我可以使用 foo<S: AsRef<str>>(s: S) , 但换一种方式呢?

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

最佳答案

我认为您所追求的可以通过 Into trait 实现,像这样:

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

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

关于generics - 通用函数接受 &str 或移动字符串而不复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535820/

相关文章:

java - 如何将未知类型的对象传递给未知类型的类

java - 为什么在使用委托(delegate)方法时没有 Unchecked Cast 警告?

rust - Rust Gnuplot-将PNG以字节为单位保存在内存中

iterator - Rust 可以使用传递给函数的迭代器吗?

rust - Rust 集合是否有能力拥有它们存储的数据?

java - 如何对多个耦合对象使用泛型?

java - 通用列表和反射(reflection)

types - 为什么类型别名不能使用 Rust 中原始类型的关联常量?

curl - 使用 curl 向 Actix 服务器发送 POST 请求失败,返回 "400 Bad Request"

c++ - 拥有 unique_ptr 对象的唯一所有权意味着什么?