#module #通用 #基础 #问题 #集合 #解决 #类型

no-std wtools

通用工具集合,用于解决问题。从根本上扩展语言而不破坏,因此可以单独使用或与其他类似模块一起使用。

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算法

Download history 29/week @ 2024-03-12 25/week @ 2024-03-19 30/week @ 2024-03-26 81/week @ 2024-04-02 21/week @ 2024-04-09 19/week @ 2024-04-16 27/week @ 2024-04-23 23/week @ 2024-04-30 44/week @ 2024-05-07 34/week @ 2024-05-14 42/week @ 2024-05-21 124/week @ 2024-05-28 192/week @ 2024-06-04 72/week @ 2024-06-11 81/week @ 2024-06-18 35/week @ 2024-06-25

每月下载402
用于 11 个包 (9 直接)

MIT 协议

1MB
29K SLoC

模块 :: wtools

experimental rust-status docs.rs Open in Gitpod discord

通用工具集合,用于解决问题。从根本上扩展语言而不破坏,因此可以单独使用或与其他类似模块一起使用。

示例 :: 实现

#[ 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