2个版本
0.1.1 | 2020年11月4日 |
---|---|
0.1.0 | 2020年10月23日 |
#2824 在 Rust模式
10KB
108 行
应用方法
概述
允许您将任何作为参数提供的函数应用于对象。
由于您可以将操作连接到对象并形成链式调用,因此它允许您清晰地描述操作顺序。这在例如在对象创建后想要用其他方法更改内部状态时非常有用。
示例
#[derive(Debug, PartialEq)]
struct Dog {
name: String,
size: String,
}
impl Dog {
fn new() -> Self {
Self {
name: "Pochi".to_string(),
size: "Middle".to_string(),
}
}
}
let mut exact_dog = Dog::new();
exact_dog.size = "Big".to_string();
let dog = Dog::new().apply(|it| it.size = "Big".to_string());
assert_eq!(dog, exact_dog);
let mut exact_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
exact_path.push("src/lib.rs");
let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).apply(|it| it.push("src/lib.rs"));
assert_eq!(path, exact_path);
let mut exact_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
exact_path.push("src/lib.rs");
let path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.apply(|it| it.push("src"))
.apply(|it| it.push("lib.rs"));
assert_eq!(path, exact_path);
let mut exact_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
exact_path.push("src/lib.rs");
let path =
PathBuf::from(env!("CARGO_MANIFEST_DIR")).apply_with_param(PathBuf::push, "src/lib.rs");
assert_eq!(path, exact_path);
let mut exact_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
exact_path.push("src");
exact_path.push("lib.rs");
let path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.apply_with_params(PathBuf::push, vec!["src", "lib.rs"]);
assert_eq!(path, exact_path);