26 个版本
0.2.20 | 2022年7月18日 |
---|---|
0.2.18 | 2022年6月26日 |
0.1.8 | 2022年1月18日 |
0.1.6 | 2021年12月21日 |
0.1.0 | 2021年10月1日 |
#912 在 算法
每月下载402次
用于 11 个包 (9 直接)
1MB
29K SLoC
模块 :: wtools
通用工具集合,用于解决问题。从根本上扩展语言而不破坏,因此可以单独使用或与其他类似模块一起使用。
示例 :: 实现
#[ cfg( feature = "typing_default" ) ]
{
use wtools::prelude::*;
println!( "implements!( 13_i32 => Copy ) : {}", implements!( 13_i32 => Copy ) );
println!( "implements!( Box::new( 13_i32 ) => Copy ) : {}", implements!( Box::new( 13_i32 ) => Copy ) );
}
示例 :: 类型构造器
在 Rust 中,你通常需要将给定类型包装成一个新的类型。孤儿规则的作用主要是防止你为外部类型实现外部特质。为了克服这种限制,开发者通常将外部类型包装在元组中,引入新的类型。类型构造器正是这样做的,并为构造的类型自动实现 From、Into、Deref 等特质。
宏 types 负责生成 Single、Pair、Homopair、Many 的代码。每个类型构造器都有自己的关键字,但 Pair 和 Homopair 在组成类型的数量上使用相同的关键字。可以一次性定义所有类型。
#[ cfg( feature = "dt_default" ) ]
{
use wtools::prelude::*;
types!
{
single MySingle : f32;
single SingleWithParametrized : std::sync::Arc< T : Copy >;
single SingleWithParameter : < T >;
pair MyPair : f32;
pair PairWithParametrized : std::sync::Arc< T1 : Copy >, std::sync::Arc< T2 : Copy >;
pair PairWithParameter : < T1, T2 >;
pair MyHomoPair : f32;
pair HomoPairWithParametrized : std::sync::Arc< T : Copy >;
pair HomoPairWithParameter : < T >;
many MyMany : f32;
many ManyWithParametrized : std::sync::Arc< T : Copy >;
many ManyWithParameter : < T >;
}
}
示例 :: make - 可变参数构造器
实现 [Make0]、[Make1] 等特质,以提供用不同参数集构建你的结构的接口。在这个示例结构中,Struct1 可以不带参数、用一个参数或用两个参数构建。
- 不带参数的构造器将字段填充为零。
- 带单个参数的构造器将两个字段都设置为参数的值。
- 带两个参数的构造器为每个字段设置单独的值。
#[ cfg( feature = "dt_default" ) ]
{
use wtools::prelude::*;
#[ derive( Debug, PartialEq ) ]
struct Struct1
{
a : i32,
b : i32,
}
impl Make0 for Struct1
{
fn make_0() -> Self
{
Self { a : 0, b : 0 }
}
}
impl Make1< i32 > for Struct1
{
fn make_1( val : i32 ) -> Self
{
Self { a : val, b : val }
}
}
impl Make2< i32, i32 > for Struct1
{
fn make_2( val1 : i32, val2 : i32 ) -> Self
{
Self { a : val1, b : val2 }
}
}
let got : Struct1 = make!();
let exp = Struct1{ a : 0, b : 0 };
assert_eq!( got, exp );
let got : Struct1 = make!( 13 );
let exp = Struct1{ a : 13, b : 13 };
assert_eq!( got, exp );
let got : Struct1 = make!( 1, 3 );
let exp = Struct1{ a : 1, b : 3 };
assert_eq!( got, exp );
}
添加到您的项目
cargo add wtools
从仓库中试用
git clone https://github.com/Wandalen/wTools
cd wTools
cd sample/rust/wtools_trivial_sample
cargo run
依赖关系
~2.2–3.5MB
~87K SLoC