clonelicious
2025年6月21日大约 2 分钟cloneliciousspawnrust
clonelicious 是一个 Rust 宏库,简化了克隆和闭包执行。
clone!
宏自动克隆变量并立即执行闭包,使用克隆的值,这简化了 Rust 编程中的常见模式。
安装
要安装 clonelicious
,运行以下命令:
cargo add clonelicious
使用方法
use clonelicious::*;
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res: String = clone!(s1, s2 => {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}", s1, s2)
});
assert_eq!(res, format!("{} {}", s1, s2));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res: String = clone!(s1, s2 => async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}", s1, s2)
})
.await;
assert_eq!(res, format!("{} {}", s1, s2));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!").await, String::from("Hello World!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data: &str| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => |data: String| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!".to_owned()).await, format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!").await, format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data: &str| {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!"), format!("{} {}{}", s1, s2, "!"));
let s1: String = String::from("Hello");
let s2: String = String::from("World");
let res = clone!(s1, s2 => move |data: String| async move {
assert_eq!(s1, String::from("Hello"));
assert_eq!(s2, String::from("World"));
format!("{} {}{}", s1, s2, data)
});
assert_eq!(res("!".to_owned()).await, format!("{} {}{}", s1, s2, "!"));
许可证
本项目使用 MIT 许可证。详情请参见 LICENSE 文件。
贡献
欢迎贡献!请提交问题或拉取请求。
联系
如有任何疑问,请通过电子邮件联系作者:[email protected]。