铁 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();
铁 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,而不是隐式使用.