在为CommandBuilder类添加字段后,Command::builder函数中生成CommandBuilder的默认实例还未添加字段初始值,这里简单起见,我们用#[derive(Default)]派生宏自动为CommandBuilder类实现DefaultTrait,从而可以调用该Traitdefault()函数生成其默认实例。 quote! { impl Command { pub fn builder() -> CommandBuilder { Command...
#[proc_macro_derive(ObjectMacro)] pub fn object_macro_derive(input: TokenStream) -> TokenStream { TokenStream::new() } 此处我们就可以在这基础上实现额外的代码,他将在声明该宏文件中自动添加代码。 我们做以下测试: #[proc_macro_derive(ObjectMacro)] pub fn object_macro_derive(input: TokenStream) ...
Result是一个枚举类型,其定义如下: #[derive(Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]#[must_use ="this `Result` may be an `Err` variant, which should be handled"]#[rustc_diagnostic_item ="result_type"]#[stable(feature ="rust1", since ="1.0.0")]pubenumResult Result枚举...
#[derive(Clone, Default)] struct HcluaMacro { field: u32, } 此时我们就可以使用: let obj = HcluaMacro::default(); let obj_clone = obj.clone(); 类似的还要在序列化的宏等。 过程宏的实战 目录为Rust中的lua库hclua做对象的绑定,可以快速的实现Rust对象在Lua中的快速使用绑定。 新建库 由于过程...
fnmain(){#[derive(Debug)]enumMessage{Quit,Move{x:i32,y:i32},Write(String),ChangeColor(i32,i32,i32),}impl Message{fncall(&self){println!("{:?}",self)}}letm=Message::Write(String::from("hello"));m.call();} 方法体使用了self来获取调用方法的值。此时输出结果为Write("hello") ...
Default::default() }; } 可导出的 如果所有类型的字段都实现了 Default ,则此 trait 可以与 #[derive] 一起使用。当derive d 时,它将使用每个字段类型的默认值。 如何实现 Default? 为default() 方法提供一个实现,该方法返回您的类型的值,该值应该是默认值: enum Kind { A, B, C, } impl Default ...
#[derive(Debug)]pubenumUserStatus { Active,Inactive,Suspended { until:DateTime<Utc>},Deleted { deleted_at:DateTime<Utc>},} 1. 2. 3. 4. 5. 6. 7. 我们还可以表示状态转换: 复制 usechrono::{DateTime,Utc};#[derive(Debug)]pubenumUserStatus { ...
在通过 {:?} 打印的时候,会自动调用实现的 fmt 方法。当然啦,让结构体实现某个 trait 还有其它,也就是通过 derive 派生。 usestd::fmt::Debug;fnprint_debug<T:Debug>(x: T) {println!("{:?}", x) }// 让结构体实现 Debug#[derive(Debug)]structGirl{ ...
就像对待结构体一样,#[derive]可以用在枚举上以定义比较运算符,其定义与结构体的情况类似。 数组 Rust数组等同C语言的数组:内联存储编译时已知数量的值。C中的T[N]在Rust中被拼成[T;N]。数组是用[a, b, c]语法创建的,一个有很多相同值的副本的数组可以用[0x55u8; 1024]创建。一个多维数组可以被声明为...
#[derive(Debug, Clone, Copy)]enum Message {IncrementPressed,DecrementPressed,}// ...type Message = Message; new 这里和通常编写代码一样,需要返回自身实例,就不做过多解释了 fn new() -> Self {Self { value: 0, increment_button: Default::default(), decrement_button: Default::default() }} ...