Có giống như String
và &str
?
Có. A Vec<T>
là biến thể thuộc sở hữu của &[T]
. &[T]
là tài liệu tham khảo thành bộ T
s được đặt tuần tự trong bộ nhớ (a.k.a. a slice). Nó đại diện cho một con trỏ đến đầu của các mục và số lượng các mục. Tham chiếu đề cập đến nội dung nào đó mà bạn không sở hữu, do đó, tập hợp các hành động bạn có thể thực hiện với nó bị giới hạn. Có một biến thể có thể thay đổi (&mut [T]
), cho phép bạn thay đổi các mục trong slice. Bạn không thể thay đổi bao nhiêu trong slice mặc dù. Nói cách khác, bạn không thể biến đổi bản thân slice.
mất một &[u8]
và làm cho nó một Vec
Đối trường hợp cụ thể này:
let s: &[u8]; // Set this somewhere
Vec::from(s);
Tuy nhiên, điều này đã cấp phát bộ nhớ không trên stack, sau đó bản sao mỗi giá trị vào bộ nhớ đó. Nó đắt hơn cách khác, nhưng có thể là điều đúng cho một tình huống nhất định.
hoặc ngược lại
let v = vec![1u8, 2, 3];
let s = v.as_slice();
này về cơ bản là "tự do" như v
vẫn sở hữu dữ liệu, chúng tôi chỉ giao ra một tham chiếu đến nó. Đó là lý do tại sao nhiều API cố gắng lấy lát khi có ý nghĩa.