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日

#363Rust 模式

Download history 1/week @ 2024-05-25 1/week @ 2024-06-01 14/week @ 2024-06-29 66/week @ 2024-07-27

每月 78 次下载

MIT/Apache

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