gpt4 book ai didi

Rust String AsRef 不会自动借用 [u8]

转载 作者:行者123 更新时间:2023-12-05 01:49:21 25 4
gpt4 key购买 nike

Rust String 同时实现了 AsRef<str>AsRef<[u8]>

但为什么 Rust 正确地允许 String 被借用为 &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 特性不是通用的——它只允许选择一个类型来“取消引用”。对于 String,就是 str

AsRefBorrow 特征对编译器来说并不特殊。它们可供通用代码显式使用,而不是隐式使用。

关于Rust String AsRef<T> 不会自动借用 [u8],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74201661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com