簡體   English   中英

實現 Size 特征

[英]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 ,而很少有類型這樣做。

這很好,因為VecSized ,就像幾乎所有struct值一樣。 實際的Vec值不包含其元素,而是引用它們,因此無論有多少元素,它都具有定義的恆定大小,類似於指針如何存儲在 integer 值中。 您可能還會將 vecs 與切片混淆,例如[i32] ,它們是?Sized

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM