铁 rust 串同时执行AsRef<str>AsRef<[u8]>

但是,为什么Rust正确地允许字符串作为&str而不是&[u8]借入,即使我们提供了显式类型批注提示?

let s = String::from("hello");
let item: &str = &s; // Works
let item2: &[u8] = &s; // Fails

当然,显式调用可以工作,但奇怪的是为什么上面的调用不能工作

let item2: &[u8] = s.as_ref();

推荐答案

&String胁迫到&str时,这是通过Deref的特性发生的(不是AsRef,也不是Borrow).Deref个性状不是通用的--它只允许 Select one种类型来"取消引用".在String的情况下,这是str.

AsRef个性状和Borrow个性状是not special to the compiler.它们可供泛型代码使用explicitly,而不是隐式使用.

Rust相关问答推荐

在特征中使用Async时,如何解决不透明类型`impl Future<;out=self>;`不满足其关联的类型边界和警告?

如何在Rust中表示仅具有特定大小的数组

亚性状上位性状上的 rust 病伴生型界限

为昂贵的for循环制作筛子

Rust函数的返回值不能引用局部变量或临时变量

关于使用平面图功能的borrow 判断器的问题

为什么RefCell没有与常规引用相同的作用域?

获取已知数量的输入

了解Rust';s特征对象和不同函数签名中的生存期注释

如何轮询 Pin>?

为什么将易错函数的泛型结果作为泛型参数传递 infer ()?不应该是暧昧的吗?

使用 lalrpop 在 rust 中解析由 " 引用的字符串

我的 Axum 处理程序无法编译:未实现 IntoResponse 特征

在 Rust 中,为什么整数溢出有时会导致编译错误或运行时错误?

为什么 Rust 允许写入不可变的 RwLock?

使用 serde_json 进一步处理字段

我如何将 google_gmail1::Gmail> 传递给线程生成?

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

为什么我不能将元素写入 Rust 数组中移动的位置,但我可以在元组中完成

来自外部函数的future 内部可变引用