A Rust rendelkezik minta dekonstrukcióval a függvény paramétereihez sorokon, tömbökön és struktúrákon, például:
fn f((a, b): (u32, i32), [x, y, z]: [String; 3]) { }
struct A { a: u32, b: String }
fn g(A { a, b }: A) { }
De nincs ilyen szintaxisa a névtelen típusokhoz / objektumokhoz, mivel az objektumok egyszerűen nem léteznek a rozsdában. Képzeld el, hogy a rozsdának volt egy szintaxisa ehhez:
fn f(param: {a: String, b: String}) {} // Invalid code!
Hogy hívná valaki ezt a funkciót? Nincs mód ilyen típusú példány létrehozására. A javascriptben (/typescript) ez lehetséges, a dinamikus gépelés miatt, de a rozsdában ismerni kell egy típust, hogy meg tudd építeni.
Ha érdekli a kulcsszóargumentumok hamisítása a függvényekben, ez segíthet: Hogyan lehet a legjobban *hamisítani* kulcsszóstílus-függvény argumentumokat a Rust-ban?
Ha nevet szeretne adni a soroknak, valamint a paramétereiknek, akkor az instabil bindings_after_at
-szolgáltatás engedélyezi ezt a szintaxist:
#![feature(bindings_after_at)]
fn f(my_tuple @ (a, b): (u32, u32)) {
println!("this: {:?}", my_tuple);
println!("is the same as: {:?}", (a, b));
}
// or this
fn g(arr @ [.., tail] : [u32; 5]) {
println!("this: {}", arr[4]);
println!("is the same as: {}", tail);
}
24.12.2020