Yeni bir vektör oluşturmak ve argüman vektörlerinin artık alakalı olmadığına ve yok edilmek zorunda olduklarına, bunların sahipliğini almasına yardımcı olmak için güzel bir işlev istiyorum. Özellikle bağımsız değişkenlerden herhangi birini yapmak zorunda olmamak (append
, extend
veya push_all
kullanmak ve bu nedenle çağrı imzasını değiştirmek) istemiyorum. Kodu (playpen link):İki vektörü tüketerek yeni bir vektör oluşturmanın iyi bir yolu nedir?
fn main() {
let arg1 = vec![1, 2, 3];
let arg2 = vec![4, 5, 6];
let desired = consume_and_concat(arg1, arg2);
assert_eq!(desired, vec![1, 2, 3, 4, 5, 6]);
}
fn consume_and_concat(vec1: Vec<i32>, vec2: Vec<i32>) -> Vec<i32> {
// something nice here
}
Ben Vec
s için hiçbir +
olduğunu biliyorum. Ruby'de, veya vec1.concat(vec2)
veya [vec1, vec2].flatten
yapıyorum. Kaybettiğim benzer bir şey var mı?
Ah. Arayanın “constume_and_concat (mut arg1, arg2)” olması için 'mut' eklemem gerektiğini düşündüm. Yani sanırım bu sorun değil ... bu 'kendini' geri döndürmez 'kendini' geri döndürmez, böylece zincirlenebilir ve doğrudan geri gönderilebilir ... – carols10cents
Ayrıca (kararsız) ['append'] (http: //doc.rust-lang.org/std/vec/struct.Vec.html#method.append), veri yapılarının (birkaçını) kendi iç değişmezlerinden daha verimli olması için kullanmasına izin verecek şekilde tasarlanmıştır. Vec :: append 'sadece bir' memcpy 'olabilir. – huon