#module #constructor #fundamental #general-purpose #problem #collection #solving

no-std std_x

用于解决问题的通用工具集合。本质上扩展了语言而不破坏,因此可以单独使用或与另一类模块结合使用。

4 个版本

0.1.4 2022年6月26日
0.1.3 2022年6月12日
0.1.2 2022年5月25日
0.1.0 2022年5月25日

开发工具 中排名 2504

Download history 5/week @ 2024-04-01

每月下载量 2,178

MIT 许可证

2MB
54K SLoC

模块 :: std_x

experimental rust-status docs.rs discord

用于解决问题的通用工具集合。本质上扩展了语言而不破坏,因此可以单独使用或与另一类模块结合使用。

示例 :: 实现

use std_x::prelude::*;

fn main()
{
  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 使用相同的关键字,不同在于组成类型的数量。可以一次性定义所有类型。

use std_x::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] 直至 MakeN,以提供使用不同参数集构造你的结构的接口。在这个示例结构中,Struct1 可以无参数、单参数或双参数构造。

  • 无参数构造函数将字段填充为零。
  • 单参数构造函数将两个字段都设置为参数的值。
  • 双参数构造函数设置每个字段的独立值。
use std_x::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 std_x

依赖项

~2.2–4MB
~87K SLoC