12 个版本
0.1.11 | 2024年1月15日 |
---|---|
0.1.10 | 2023年5月19日 |
0.1.8 | 2023年3月22日 |
0.1.6 | 2021年5月18日 |
0.1.3 | 2021年3月19日 |
#363 在 Rust 模式
每月 78 次下载
23KB
360 行
有关更多信息,请参阅 RFC 作为 Readme-For-Crate。
概览
本项目通过使用进程宏 structx!{}
,Structx!{}
,#[named_args]
和 args!{}
模拟 Rust 中的匿名结构和命名参数。
此 crate 的用法
在您的 Cargo.toml 文件中添加以下内容
[dependencies]
structx = "0.1"
[build-dependencies]
inwelling = "0.5"
[package.metadata.inwelling]
structx = true
在您的 build.rs 文件中添加以下内容
inwelling::to( "structx" );
在您的 .rs 文件中添加以下内容
use structx::*;
如果您想使用命名参数,请添加以下内容
use structx::named_args::*;
匿名结构的定义和表示法
匿名结构是无需提供结构名称的 struct
。然而,字段名称是必须的。只有当它们由相同的字段名称集合组成时,匿名结构才具有相同的类型。字段的顺序无关紧要。
匿名结构的价值
匿名结构值的表示法是 structx!{}
。
匿名结构值示例
let foo = structx!{ i: 3, b: true };
let bar = structx!{ x, y };
匿名结构的类型
匿名结构类型的表示法是 Structx!{}
。
匿名结构类型示例
fn foo( x: i32, y: i32 ) -> Structx!{ x: i32, y: i32 } {
structx!{ x, y: y+1 }
}
为匿名结构推导的特质
Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash。
let a = structx!{ width : 800, height: 600 };
let b = structx!{ height: 600, width : 800 };
let c = structx!{ width : 1024, height: 768 };
assert_eq!( a, b );
assert_ne!( a, c );
命名参数的模拟
在定义位置,为函数添加属性 #[named_args]
。
#[named_args]
fn set_size( width: u32, height: u32 ) { todo!() }
在调用位置,使用 args!{}
包装参数。
set_size( args!{ width: 1024, height: 768 });
许可证
根据Apache License 2.0或MIT License,由您自行选择。
依赖项
~0.3–1.6MB
~23K SLoC