可以将 a 借入Vec<u32>a&Vec<u32>或 a &[u32]。我认为这要归功于AsRef或Borrow特质。但是,我无法在我自己的自定义类型上实现这种借用。我在这里吠错树了吗?
use std::borrow::Borrow;
struct MyArray([u32; 5]);
impl MyArray {
fn new() -> MyArray {
MyArray([42; 5])
}
}
impl AsRef<[u32]> for MyArray {
fn as_ref(&self) -> &[u32] {
&self.0
}
}
impl Borrow<[u32]> for MyArray {
fn borrow(&self) -> &[u32] {
&self.0
}
}
fn main() {
let ma = MyArray::new();
let _: &[u32] = &ma; // compilation failure
}
Run Code Online (Sandbox Code Playgroud)
您正在寻找std::ops::Deref:
除了用于
*在不可变上下文中Deref使用(一元)运算符进行显式取消引用操作之外,在许多情况下也由编译器隐式使用。这种机制称为“Deref强制”。在可变上下文中,DerefMut使用。
修改后的代码:
use std::ops::Deref;
struct MyArray([u32; 5]);
impl MyArray {
fn new() -> MyArray {
MyArray([42; 5])
}
}
impl Deref for MyArray {
type Target = [u32];
fn deref(&self) -> &[u32] {
&self.0
}
}
fn main() {
let ma = MyArray::new();
let _: &[u32] = &ma;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |