Macros 在rust宏_规则中捕获生存时间

Macros 在rust宏_规则中捕获生存时间,macros,rust,Macros,Rust,在宏规则中!您可以在冒号后声明要解析的不同类型的内容(例如$x:ident表示标识符,或者$y:ty表示类型),但是我不知道如何声明要捕获一个生命周期,例如'a或'static'。现在可以这样做吗?您可以将它们捕获为$expr。如果要从给定给宏的参数创建新的通用生存期参数,则必须将其与$my_life:tt()匹配: macro\u规则!my_宏{ ($a:tt)=>{struct宏定义{field:&$a str} } 您可以使用生命周期说明符在宏中捕获生命周期: macro\u规则!匹配生命

在宏规则中!您可以在冒号后声明要解析的不同类型的内容(例如$x:ident表示标识符,或者$y:ty表示类型),但是我不知道如何声明要捕获一个生命周期,例如'a或'static'。现在可以这样做吗?

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

如果要从给定给宏的参数创建新的通用生存期参数,则必须将其与
$my_life:tt
()匹配:

macro\u规则!my_宏{
($a:tt)=>{struct宏定义{field:&$a str}
}

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

macro\u规则!匹配生命周期{
($(lt:life),+)=>{}
}
匹配你的一生!(‘a,’b,’静止,’你好);

您可以在或中阅读有关
生存期
说明符的更多信息


如果您只是想匹配某个类型的泛型,那么最好使用以下方法:

struct-Example)=>{}
}

匹配泛型!(例如,我尝试过这样做,但它似乎对我不起作用。这里有一个playpen:。我有什么问题吗?它需要有一个已定义的生存期才能工作。在这个实例中,为生存期提供一个特定的名称并没有真正的目的,因为它只是用作一般参数。如果已经定义了生存期(例如,作为循环的标签)那么$expr工作得很好。不过,我可以想象,如果在生命周期中对某个特征或结构进行参数化,它会很有用,事实上,我不确定是否有办法做到这一点(我从来都不需要这样做)。下面是一个复杂的例子,说明了它的用处:。我想使用它,因为我有一个宏,可以生成一个在整个生命周期内通用的函数@JW:
expr
似乎不起作用,即使在您提到的情况下:
macro_rules! my_macro {
    ($a:tt) => { struct MacroDefined<$a> { field: &$a str } }
}