2 个版本

0.0.2 2021年9月5日
0.0.1 2021年9月5日

727数据结构 中排名

Download history 739/week @ 2024-04-01 414/week @ 2024-04-08 283/week @ 2024-04-15 352/week @ 2024-04-22 532/week @ 2024-04-29 395/week @ 2024-05-06 126/week @ 2024-05-13 154/week @ 2024-05-20 376/week @ 2024-05-27 416/week @ 2024-06-03 421/week @ 2024-06-10 238/week @ 2024-06-17 49/week @ 2024-06-24 148/week @ 2024-07-08 133/week @ 2024-07-15

每月 338 次下载
cargo-playdate 中使用

Apache-2.0/MIT 许可协议

27KB
355 行 代码

try-lazy-init

Lib.rs Crates.io Docs.rs

Rust 1.51 CI Crates.io - License

GitHub open issues open pull requests crev reviews

这是一个简单的 lazy-init 分支,增加了可失败的初始化功能,这是我无法通过包装器提供的。

安装

请使用 cargo-edit 来始终添加此库的最新版本

cargo add try-lazy-init

示例

use try_lazy_init::{Lazy, LazyTransform};

let lazy = Lazy::new();
assert_eq!(
  // Not yet initialized, so this closure runs:
  lazy.get_or_create(|| 1),
  &1
);
assert_eq!(
  // Already initialized so this closure doesn't run:
  lazy.try_get_or_create(|| { unreachable!(); Err(()) }),
  Ok(&1)
);
assert_eq!(lazy.get(), Some(&1));
assert_eq!(lazy.into_inner(), Some(1));

let lazy_transform = LazyTransform::new(1);
assert_eq!(
  // Not yet initialized, so this closure runs:
  lazy_transform.get_or_create(|x| x + 1),
  &2
);
assert_eq!(
  // Only available `where T: Clone`.
  // Already initialized so this closure doesn't run:
  lazy_transform.try_get_or_create(|_| { unreachable!(); Err(()) }),
  Ok(&2)
);
assert_eq!(
  // Available also without `where T: Clone`.
  // Already initialized so this closure doesn't run:
  lazy_transform.get_or_create_or_poison(|_| { unreachable!(); Err(()) }),
  Ok(&2)
);
assert_eq!(lazy_transform.get(), Some(&2));
assert_eq!(lazy_transform.into_inner(), Ok(2));

let lazy_transform_2 = LazyTransform::<_, ()>::new(1);
assert_eq!(
  // This poisons by error, which won't panic this method or `.try_into_inner`:
  lazy_transform_2.get_or_create_or_poison(|_| Err(())),
  Err(Some(()))
);
assert_eq!(
  // The original value is now gone:
  lazy_transform_2.try_into_inner(),
  Err(None)
);

许可协议

截至 2021-09-05(即分支日期),lazy-initCargo.toml 中声明 license = "Apache-2.0/MIT",而 LICENSE 中只有 MIT 许可协议的文本。我保留了这种状况。

因此,在使用时请考虑此软件包为 MIT 许可,并在贡献时为 Apache-2.0/MIT 双重许可。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据 Apache-2.0 许可协议定义,将按照上述方式双重许可,而无需任何附加条款或条件。

行为准则

变更日志

版本管理

try-lazy-init 严格遵循 语义版本控制 2.0.0,但有以下例外

  • 在主要版本更改时,次要版本不会重置为 0(除 v1 之外)。
    将其视为全局功能级别。
  • 在主要版本或次要版本更改时,补丁版本不会重置为 0(除 v0.1 和 v1 之外)。
    将其视为全局补丁级别。

这包括上述指定的 Rust 版本要求。
较早的 Rust 版本可能与当前版本兼容,但可能会随着次要或补丁版本的发布而发生变化。

受功能和补丁影响的具体版本可以从 CHANGELOG.md 中的相应标题确定。

无运行时依赖项