Rust中下划线的几种用法

在 Rust 中,下划线 (_) 是一种特殊的标识符,在各种情况下用作通配符或占位符。下面是 Rust 中下划线的一些常见用例:

1、通配符:
在模式匹配中,下划线可用作通配符模式,忽略特定值或整个模式。
下划线作为独立模式(如 _)使用时,可在模式匹配上下文中匹配任何单个值。这样就可以忽略特定值,同时还能捕捉到模式的其他部分。

let (_, y, _) = (1, 2, 3);


在宏模式中,当您不关心值时,可以使用下划线作为占位符。

macro_rules! my_macro {
    ($($x: expr),* $(,)?) => {
        $(
            // Do something with $x
        )*
    };
}

下划线可用作匹配表达式中的通配符模式。这可以匹配任何值,而无需将其绑定到变量中。

2、匿名、占位符:
在计算或赋值过程中,您可以使用 _ 作为临时变量名,这样以后就不需要引用变量值了。
也称为无需使用的变量:当你声明了一个变量但没有使用它时,可以在其名称前加上下划线,以避免未使用变量的警告。

fn main() {
    let _unused_variable = 42;
}

如果函数有未使用的参数,可以在参数名称前加上下划线,表示有意忽略这些参数。

fn example_function(_unused_param: i32) {
    // Function body
}


在泛型或函数中,可能会有未使用的生命周期参数,可以用下划线命名,以表示在正文中不使用这些参数。

struct MyStruct<'a, _b>(PhantomData<&'a ()>, PhantomData<&'_ ()>);

在泛型上下文中,_ 可用作未知类型参数的占位符。这样,您就可以编写泛型函数和数据结构,而无需指定所涉及的具体类型。

在实现trait 但不使用某些trait 方法时,可以使用下划线来避免未使用trait 方法的警告。

trait MyTrait {
    fn method_one(&self);
    fn method_two(&self) {
        // Implementing only method_one
    }
}