在生锈的macro_rules中捕获生命

时间:2014-10-27 18:51:59

标签: macros rust

在macro_rules中!你可以在冒号后说出要解析的不同类型的东西(例如$ x:ident表示标识符,或$ y:ty表示类型),但是我对如何声明我想要捕获生命周期感到困惑,喜欢' a或'静态。这可能吗?

3 个答案:

答案 0 :(得分:2)

您可以使用lifetime说明符来捕获宏中的生命周期:

macro_rules! match_lifetimes {
    ( $( lt:lifetime ),+ ) => {}
}

match_lifetimes!( 'a, 'b, 'static, 'hello );

playground

您可以在RFCrust reference中详细了解lifetime指示符。


如果您只想匹配某个类型的泛型,则最好改用tt

struct Example<'a, T>(&'a T);

macro_rules! match_generics {
    ( $typ:ident < $( $gen:tt ),+ > ) => {}
}

match_generics!( Example<'a, T> );

playground

答案 1 :(得分:0)

您可以将它们捕获为$ exprs。

答案 2 :(得分:0)

如果您要根据给宏的参数创建新的通用生命周期参数,则必须将其与$my_lifetime:ttsee playground)匹配:

macro_rules! my_macro {
    ($a:tt) => { struct MacroDefined<$a> { field: &$a str } }
}