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 模式
65 每月下载量
用于  8 crates
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