admin管理员组

文章数量:1636810

rust中报这个错误,主要是类型T没有实现Copy特性: 

move occurs because `arr[_]` has type `T`, which does not implement the `Copy` trait

 

这里涉及到所有权机制,基本数据类型在移动的时候,会单独Copy一份出来,因为基本数据类型存储在栈里面,并且基本数据类型实现了Copy特性,所以可以直接return:

fn max(array: &[i32]) -> i32 {
    let mut max_index = 0;
    let mut i = 1;
    while i < array.len() {
        if array[i] > array[max_index] {
            max_index = i;
        }
        i += 1;
    }
    return array[max_index];
}

但是你将i32的基础数据类型换成了泛型 T,那么引用类型T就就没有实现Copy特性,所以在移动的时候,就需要返回引用:

fn max<T: CanCampare>(arr: &[T]) -> &T {
    let mut index = 0;
    let mut target = 1;
    while index < arr.len() {
        if arr[index].campare(&arr[target]) > 0 {
            target = index
        }
        index += 1;
    }
    // 因为要返回类型T,T是引用类型,没有实现Copy特性,所以只能返回引用
    return &arr[target];
}

 

本文标签: arroccursmovetypetrait