#closures #const #nightly #const-fn

nightly no-std const_closure

创建const可调用闭包的辅助工具

7个版本

0.3.0 2022年11月28日
0.2.3 2022年11月10日
0.2.2 2022年9月25日
0.1.1 2022年9月13日

152无标准库 中排名

每月下载量 49
2 个crate中使用 (通过 const_sort_rs)

MIT/Apache

15KB
252

Const Closure

Daily-Nightly Rust-Main-CI docs.rs crates.io rustc

此crate允许您创建在const上下文中表示闭包的类型。

为此,只需创建一个提供的闭包辅助函数的实例:使用 ConstClosure 和相关的 new 函数。

闭包辅助函数实例获取要捕获的数据作为相同所有权的元组(拥有、可变或ref)以及要执行的实现函数。

实现函数必须是一个 const fn,它获取捕获的状态(一个元组:用于 FnOnce 的拥有值,用于 &mut 的可变引用和用于 Fn 的引用)以及表示闭包参数的元组。

闭包辅助函数实例在调用时返回闭包函数的返回值。

示例

#![feature(const_trait_impl)]
#![feature(const_mut_refs)] // Only required for the FnMut example

use const_closure::ConstClosure;

// FnOnce:
const _: () = {
  const fn imp((state,): (i32,), (arg,): (i32,)) -> i32 {
    state + arg
  }
  let cl = ConstClosure::new((5,), imp);
  assert!(7 == cl(2));
};

// FnMut:
const _: () = {
  const fn imp((state,): (&mut i32,), (arg,): (i32,)) -> i32 {
    *state += arg;
    *state
  }
  let mut i = 5;
  let mut cl = ConstClosure::new((&mut i,), imp);

  assert!(7 == cl(2));
  assert!(8 == cl(1));
};

// Fn:
const _: () = {
  const fn imp((state,): (&i32,), (arg,): (i32,)) -> i32 {
    *state + arg
  }
  let i = 5;
  let mut cl = ConstClosure::new((&i,), imp);
  assert!(7 == cl(2));
  assert!(8 == cl(3));
  assert!(6 == cl(1));
};

注意:已经移除了 const_closure 宏,改为新的基于泛型的方法。

作者

raldone01onestacked 是此库的主要作者和维护者。

许可证

该项目可在以下任一许可证下发布:

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意提交以包含在作品中的贡献将双重许可,如上所述,没有其他条款或条件。

无运行时依赖