use anchor_lang::prelude::*;
use num_derive::*;
use num_traits::*;
declare_id!("Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS");
此处使用declare_id宏定义了Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS,这个ID对所有anchor工程都是一样的。让我们来看一下他的原型:
#[proc_macro]
pub fn declare_id(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let id = parse_macro_input!(input as id::Id);
proc_macro::TokenStream::from(quote! {#id})
}
#[macro_export]
macro_rules! quote {
() => {
$crate::__private::TokenStream::new()
};
($($tt:tt)*) => {
{
let mut _s = $crate::__private::TokenStream::new();
$crate::quote_each_token!(_s $($tt)*);
_s
}};
}
上面这几个宏定义就是declare!所有关联调用的宏了,那什么是宏?
简单地说,Rust宏让你

本文深入解析Rust宏,包括declare_id的用途,宏的基本运作机制,如匹配器/Matcher和转码器/Transcriber。讨论了不同类型的宏选择器,并通过示例解释了如何处理多个变量。文章还介绍了Rust的三种程序宏:Function-like macros、Derive macros和Attribute macros,特别关注了derive宏如何为结构体或枚举引入trait。
最低0.47元/天 解锁文章
1539

被折叠的 条评论
为什么被折叠?



