2个稳定版本
| 1.0.1 | 2020年9月4日 | 
|---|---|
| 1.0.0 | 2020年6月28日 | 
#1281 in Rust模式
21KB
336 行
pl-lens
这个Rust库提供对透镜的支持,透镜是函数式编程中用于关注复杂数据结构一部分的一种机制。
用法
在您的 Cargo.toml 中添加依赖项
[dependencies]
pl-lens = "1.0"
然后,在您的crate中
// To use the `derive(Lenses)` macro
use pl_lens::Lenses;
// To use the `lens!` macro
use pl_lens::lens;
// To bring trait methods like `get_ref` and `set` into scope
use pl_lens::{Lens, RefLens};
示例
Lens 可以通过仅更改数据的一部分来转换概念上不可变的数据结构。让我们通过一个示例来演示
#[derive(Lenses)]
struct Address {
    street: String,
    city: String,
    postcode: String
}
#[derive(Lenses)]
struct Person {
    name: String,
    age: u8,
    address: Address
}
let p0 = Person {
    name: "Pop Zeus".to_string(),
    age: 58,
    address: Address {
        street: "123 Needmore Rd".to_string(),
        city: "Dayton".to_string(),
        postcode: "99999".to_string()
    }
};
assert_eq!(lens!(Person.name).get_ref(&p0), "Pop Zeus");
assert_eq!(lens!(Person.address.street).get_ref(&p0), "123 Needmore Rd");
let p1 = lens!(Person.address.street).set(p0, "666 Titus Ave".to_string());
assert_eq!(lens!(Person.name).get_ref(&p1), "Pop Zeus");
assert_eq!(lens!(Person.address.street).get_ref(&p1), "666 Titus Ave");
许可证
pl-lens 在MIT许可证下分发。有关详细信息,请参阅LICENSE。
依赖项
~1.5MB
~35K SLoC