[英]Implementing Sized trait
创建了一个实现 Sized 特征的简单结构。
struct FixedIndividual<T: Sized,A: cmp::Ord, >{
chromosome: T,
score: Option<A>,
}
impl<T: Sized, A: cmp::Ord> FixedIndividual<T,A>{
fn new(chromosome: T) -> Self{
FixedIndividual { chromosome , score: None}
}
}
但是,我设法创建了一个包含 Vec(仅实现?大小)的实例,
#[test]
fn init_vector(){
let chromosome: Vec<i32> = vec![1,2,3,4,5];
let chromosome_cpy = chromosome.clone();
let indv:FixedIndividual<Vec<i32>, OrderedFloat<f64>> = FixedIndividual::new(chromosome);
assert_eq!(indv.score, None);
assert_eq!( indv.chromosome
.iter()
.zip(chromosome_cpy.iter())
.all(|(a,b)| a == b ), true);
}
创建了一个实现 Sized 特征的简单结构。
您的界限是无用的,默认情况下通用界限是Sized
的,您必须选择退出它。
但是,我设法创建了一个包含 Vec(仅实现?大小)的实例,
不知道你从哪里得到这个想法,并且?Sized
不是一个特征,它只是一个界限,这意味着类型(或函数)是sizeness-agnostic 。 这并不意味着它本身没有大小。 例如Box<T>
有T: ?Sized
,这意味着T
可以调整大小或不调整大小。 无论哪种方式, Box
的大小都是如此。
未调整大小的类型意味着它实现了!Sized
,而很少有类型这样做。
这很好,因为Vec
是Sized
,就像几乎所有struct
值一样。 实际的Vec
值不包含其元素,而是引用它们,因此无论有多少元素,它都具有定义的恒定大小,类似于指针如何存储在 integer 值中。 您可能还会将 vecs 与切片混淆,例如[i32]
,它们是?Sized
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.