[英]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.