通过宏生成属性值
Generate attribute value via macro
假设我有一个名为 module_name
的 ident
输入参数。如何通过这个参数生成属性的值?
简单来说,我想生成这样的东西:
macro_rules! import_mod {
( $module_name:ident ) => {
// This does not work,
// but I want to generate the value of the feature attribute.
// #[cfg(feature = $module_name)]
pub mod $module_name;
}
}
import_mod!(module1);
// #[cfg(feature = "module1")]
// pub mod module1;
编译指令中的参数必须是文字。
一半体面的解决方法是采用文字以及您的 'feature':
macro_rules! my_import {
( $module_name:ident, $feature_name:literal ) => {
#[cfg(feature = $feature_name)]
mod $module_name;
}
}
my_import!(foo, "foo");
供参考 - https://doc.rust-lang.org/stable/reference/attributes.html#meta-item-attribute-syntax
总而言之:大多数内置属性都有规则 #[<attribute> = <literal>]
假设我有一个名为 module_name
的 ident
输入参数。如何通过这个参数生成属性的值?
简单来说,我想生成这样的东西:
macro_rules! import_mod {
( $module_name:ident ) => {
// This does not work,
// but I want to generate the value of the feature attribute.
// #[cfg(feature = $module_name)]
pub mod $module_name;
}
}
import_mod!(module1);
// #[cfg(feature = "module1")]
// pub mod module1;
编译指令中的参数必须是文字。
一半体面的解决方法是采用文字以及您的 'feature':
macro_rules! my_import {
( $module_name:ident, $feature_name:literal ) => {
#[cfg(feature = $feature_name)]
mod $module_name;
}
}
my_import!(foo, "foo");
供参考 - https://doc.rust-lang.org/stable/reference/attributes.html#meta-item-attribute-syntax
总而言之:大多数内置属性都有规则 #[<attribute> = <literal>]