如何在Rust宏中调用传入标识符的方法?
在Rust宏中调用传入标识符的实例方法
问题分析
你的代码编译报错是因为错误使用了<$foo>语法——这个写法在Rust里用于指定类型(比如<i32>::max这类关联方法调用),但你传入的$foo是变量标识符,并非类型,所以编译器会期望你用::调用关联方法,而非.调用实例方法。
修正方案
直接去掉尖括号,用变量标识符直接调用实例方法即可:
macro_rules! macro_test { ($foo:ident) => { { println!("{}", $foo.to_string()); } } } fn main() { let ss = "sim"; macro_test!(ss); }
补充说明
- 若需要在宏中调用类型的关联方法,才需要用
<类型>::方法()的语法,比如<u32>::from_str("42")。 - 调用变量的实例方法时,和普通代码逻辑一致,直接用
变量.方法()的形式即可,宏会自动将标识符替换为对应的变量名。
内容的提问来源于stack exchange,提问作者Cucaracha Anónima
相关产品推荐
相关产品推荐

