rust - 为什么 [u8] 没有实现 Clone?
问题描述
下面的示例只是一个示例,我知道我不需要 Clone 才能工作,但如果是一个带有andS
的枚举并且我想调整向量的大小,则必须是.[T]
Vec<T>
T
Clone
struct S<'a, T>{
a: &'a [T]
}
impl<'a, T> S<'a, T> {
pub fn borrow(&self) -> &[T]
where [T]: Clone {
self.a
}
}
fn main() {
let slice:[u8;3] = [1,2,3];
let x = S{a: &slice};
x.borrow();
}
错误:
error[E0277]: the trait bound `[u8]: Clone` is not satisfied
--> src/main.rs:17:7
|
17 | x.borrow();
| ^^^^^^ the trait `Clone` is not implemented for `[u8]`
那么,为什么不[u8]
Clone
呢?
解决方案
那为什么不
[u8]
Clone
呢?
查看clone
定义中方法的类型Clone
:
pub trait Clone {
pub fn clone(&self) -> Self;
// more stuff omitted..
}
它返回Self
,[u8]
在这种情况下就是这样。问题是[u8]
不是Sized
,也就是说,因为我们不知道它会有多少元素,所以在编译时我们无法知道它的大小。但是从这个方法返回它意味着它被移动到堆栈上,如果编译器不知道要为它留下多少空间,这是不可能的。
推荐阅读
- python - 正则表达式与 python
- flutter - 如何在颤振中添加图像轮播
- linux - Boost: 未定义引用 '__xstat64', '__lxstat64', '__errno_location' 错误
- android - 当用户允许权限时,我在 onRequestPermissionsResult 中授予权限的函数没有调用
- python - 如何按列中的值分组,查找空值,然后替换
- javascript - 圆环图:显示里面的百分比
- testing - DerivedData 中缺少 TestSummeries.plist 文件
- microsoft-graph-api - 在 Azure AD 中获取设备的注册或创建日期
- python-3.x - 如何使用python根据某些条件选择命令输出的特定部分
- google-cloud-platform - 如何在谷歌云引擎上的python虚拟环境中连续运行