最近,我想寫一型保持參數的3D投影:爲什麼不ops :: Range <T>實現複製,即使T是複製?
use std::ops::Range;
#[derive(Clone, Copy)]
struct CamProj {
/// Near and far plane
proj_range: Range<f32>,
/// Field of view
fov: cgmath::Rad<f32>, // `Rad` derives `Copy`
/// Width divided by height
aspect_ratio: f32,
}
不過,我得到這個錯誤:
error[E0204]: the trait `Copy` may not be implemented for this type
--> <anon>:3:21
|
3 | #[derive(Clone, Copy)]
| ^^^^
...
6 | proj_range: Range<f32>,
| ---------------------- this field does not implement `Copy`
因此很明顯,Range<T>
從未實現Copy
,即使T
是Copy
,就像f32
是。 這是爲什麼?我以爲Range<T>
只是一對T
?所以它肯定可以實現Copy
?
我敢肯定,我以前見過這個問題...但當然不能再次找到它。我找到的最接近的潛在副本是http://stackoverflow.com/questions/31045637/re-using-a-range-for-iteration。我似乎記得它沒有實現,因爲有些情況下可能會讓人困惑:https://github.com/rust-lang/rust/issues/18045 –