弃元

在 C# 中,弃元 表示编译器和其它工具链会忽略一个表达式的(部分)结果。

有多种上下文可以用到这个,例如最基本的,忽略一个表达式的结果。 在 C# 中,像这样:

_ = city.GetCityInformation(cityName);

在 Rust 中,忽略表达式的值 看上去完全一致:

_ = city.get_city_information(city_name);

在 C# 中,弃元也用于解构元组:

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

Rust 中,完全一致:

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

除了解构元组,Rust 还提供了对结构和枚举的解构,通过使用 ..,它表示类型的剩余部分:

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
}

当进行模式匹配时,忽略一部分匹配表达式是很有用的,例如 C# 中:

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

同样的,Rust 的看起来也几乎一致:

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