4 个版本
1.0.0 |
|
---|---|
0.2.0 | 2024 年 7 月 15 日 |
0.1.2 | 2024 年 7 月 1 日 |
0.1.1 | 2024 年 7 月 1 日 |
0.1.0 | 2024 年 7 月 1 日 |
471 在 游戏开发 中排名
每月下载量 87 次
用于 bevy_ui_mod_alerts
20KB
374 行
bevy_mod_try_system
此 crate 定义了 TrySystemExt
,一个扩展 trait,它在所有具有 Out = Result<Val, Error>
的 IntoSystem
上实现。它提供了一个方法 pipe_err
,该方法接受 self
和另一个系统(具有 In = Error
)作为参数,并返回一个 CombinerSystem
(这是 PipeSystem
和 system.pipe
方法背后的相同工具)将第一个系统中的错误传递到第二个系统。
有关链式输出的警告。
假设我们打算调用 system_a.pipe_err(system_b)
,其中 system_a
返回某种类型 Result<(), Error>
。如果我们想将 system_a
的一些输出 Value
管道到第三个 system_c
,我们可以这样做,只要系统 B 能够在系统 A
返回一个 Error
时提供 Value
的回退值。
fn system_a() -> Result<Value, Error> {
// ...
}
fn system_b(In(error): In<Error>) -> Value {
// ...
}
fn system_c(In(value): In<Value>) {
// ...
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Update, system_a.pipe_err(system_b).pipe(system_c))
.run();
}
重要的是,如果 system_b
无法提供回退值,那么这不太有效。然而,你通常可以很巧妙地做到这一点,例如从 system_b
返回 Option<Value>
并使用 system.map
// ...
fn system_b(In(error): In<Error>) -> Value {
// ...
}
// ...
app.add_systems(Update, system_a.map(|result| result.map(|value| Some(value))).pipe_err(system_b).pipe(system_c));
请参阅测试以获取更多信息。
依赖项
~12–17MB
~279K SLoC