Descartes

En C#, los descartes expresan al compilador y a otros que ignoren los resultados (o partes) de una expresión.

Hay múltiples contextos donde se pueden aplicar, por ejemplo, como un ejemplo básico, para ignorar el resultado de una expresión. En C#, se vería así:

_ = city.GetCityInformation(cityName);

En Rust, ignorar el resultado de una expresión se ve de manera idéntica:

_ = city.get_city_information(city_name);

Los descartes también se aplican para la destrucción de tuplas en C#:

var (_, second) = ("first", "second");

y, de manera idéntica, en Rust:

let (_, second) = ("first", "second");

Además de la destrucción de tuplas, Rust ofrece desestructuración de estructuras y enumeraciones usando .., donde .. representa la parte restante de un tipo:

struct Point {
    x: i32,
    y: i32,
    z: i32,
}

let origin = Point { x: 0, y: 0, z: 0 };

match origin {
    Point { x, .. } => println!("x is {}", x), // x is 0
}

Cuando se realiza pattern matching, a menudo es útil descartar o ignorar parte de una expresión coincidente, por ejemplo, en C#:

_ = ("first", "second") switch
{
    ("first", _) => "first element matched",
    (_, _) => "first element did not match"
};

Y nuevamente, esto se ve casi idéntico en Rust:

_ = match ("first", "second")
{
    ("first", _) => "first element matched",
    (_, _) => "first element did not match"
};