17 个版本

0.2.2 2023年6月10日
0.2.1 2016年10月4日
0.2.0 2016年2月14日
0.1.2 2015年10月1日
0.0.7 2015年3月27日

#260 in Rust 模式

Download history 31/week @ 2024-03-11 13/week @ 2024-03-18 15/week @ 2024-03-25 79/week @ 2024-04-01 9/week @ 2024-04-08 14/week @ 2024-04-15 25/week @ 2024-04-22 10/week @ 2024-04-29 10/week @ 2024-05-06 18/week @ 2024-05-13 17/week @ 2024-05-20 8/week @ 2024-05-27 18/week @ 2024-06-03 16/week @ 2024-06-10 4/week @ 2024-06-17 26/week @ 2024-06-24

65 每月下载量
用于 8 crates

MPL-2.0 许可证

85KB
1.5K SLoC

Carboxyl 是 Rust 中用于函数式反应式编程的库,是一种处理交互式应用中事件的函数式和可组合方法。更多内容请参阅 文档…

使用示例

以下是一个如何使用 Carboxyl 提供的原始类型的简单示例。首先,事件可以被发送到 汇合点。从一个汇合点可以创建一个事件 。流也可以被过滤、映射和合并。一个 信号 是一个值可能会随时间变化的抽象。例如,可以将流的最后一个事件存储在信号中。

extern crate carboxyl;

fn main() {
    let sink = carboxyl::Sink::new();
    let stream = sink.stream();
    let signal = stream.hold(3);

    // The current value of the signal is initially 3
    assert_eq!(signal.sample(), 3);

    // When we fire an event, the signal get updated accordingly
    sink.send(5);
    assert_eq!(signal.sample(), 5);
}

也可以直接遍历流,而不是将其存储在信号中

extern crate carboxyl;

fn main() {
    let sink = carboxyl::Sink::new();
    let stream = sink.stream();

    let mut events = stream.events();
    sink.send(4);
    assert_eq!(events.next(), Some(4));
}

可以使用各种原始类型将流和信号组合起来。我们可以使用一个函数将一个流映射到另一个流

extern crate carboxyl;

fn main() {
    let sink = carboxyl::Sink::new();
    let stream = sink.stream();

    let squares = stream.map(|x| x * x).hold(0);
    sink.send(4);
    assert_eq!(squares.sample(), 16);
}

或者我们可以过滤一个流以创建一个新的流,该流仅包含满足特定谓词的事件

extern crate carboxyl;

fn main() {
    let sink = carboxyl::Sink::new();
    let stream = sink.stream();

    let negatives = stream.filter(|&x| x < 0).hold(0);

    // This won't arrive at the signal.
    sink.send(4);
    assert_eq!(negatives.sample(), 0);

    // But this will!
    sink.send(-3);
    assert_eq!(negatives.sample(), -3);
}

还有一些其他原始类型可以组合流和信号

  • merge 合并相同类型的事件流。
  • 每当流触发一个事件时,对信号进行 snapshot
  • lift! 将普通函数提升为信号上的函数。
  • switch 使用包含信号的信号在不同的信号之间切换。

请参阅 文档 获取详细信息。

许可证

版权所有 2014-2020 Carboxyl 贡献者。

此源代码形式受 Mozilla 公共许可证第 2.0 版的条款约束。如果未随此文件分发 MPL 复制品,您可以从中获得一份: http://mozilla.org/MPL/2.0/

依赖项

~0–1.3MB
~17K SLoC