2014-07-18 19 views
14

Tôi muốn chuyển một mảng vào một hàm và thay đổi nội dung bên trong nó. Làm thế nào tôi có thể làm điều đó, đây là mã của tôi dưới đây, nhưng tất nhiên nó không hoạt động.Làm cách nào để chuyển một mảng vào một hàm trong Rust và thay đổi nội dung của nó?

fn change_value(mut arr: &[int]) { 
    arr[1] = 10; 
} 

fn main() { 
    let mut arr: [int, ..4] = [1, 2, 3, 4]; 
    change_value(arr); 
    println!("this is {}", arr[1]); 
} 

Tôi gặp lỗi: "không thể gán cho nội dung vec không thay đổi arr[..]".

Tôi đã tìm kiếm xung quanh, nhưng với tư cách là một lập trình viên Rust khá mới, tôi không thể tìm thấy bất kỳ thứ gì. Ngoài ra nó không giúp Rust thay đổi ngôn ngữ của nó khá nhiều nên rất nhiều phương pháp làm điều này không được chấp nhận hoặc bị loại bỏ.

Trả lời

27

Tài liệu tham khảo mộc (ký hiệu là &) có hai loại: không thay đổi (&T) và có thể thay đổi (&mut T). Để thay đổi giá trị đằng sau những tài liệu tham khảo, tài liệu tham khảo này có được có thể thay đổi, vì vậy bạn chỉ cần phải vượt qua &mut [i32] đến chức năng, không &[i32]:

fn change_value(arr: &mut [i32]) { 
    arr[1] = 10; 
} 

fn main() { 
    let mut arr: [i32; 4] = [1, 2, 3, 4]; 
    change_value(&mut arr); 
    println!("this is {}", arr[1]); 
} 

Bạn cũng không cần mut arr trong change_value tranh cãi vì mut có biểu thị sự biến đổi của biến đó, không phải của dữ liệu mà nó trỏ tới. Vì vậy, với mut arr: &[int] bạn có thể gán lại chính mình arr (để trỏ đến một lát khác), nhưng bạn không thể thay đổi dữ liệu mà nó tham chiếu.

Các vấn đề liên quan