1 个不稳定版本
0.1.0 | 2024 年 1 月 7 日 |
---|
#430 在 构建工具
6KB
Kotlike
一个 Rust 宏,用于修改问号操作符的行为,就像 Kotlin 一样
有了它,你可以轻松提取包裹在无数字 Option<T>
和 Result<T,Err>
中的值。
此外,它不会破坏你的控制流程。即使你得到一个 None
或 Err
(所有意外的值都将转换为 None
),你仍可以继续工作
这意味着
fn do_something() {
let value: Option<TypeYourWant> = wrapped_value?.something_return_option()?.something_return_result()?.value;
}
会正常工作!就像 Kotlin 风格一样。你不必担心它将抛出什么 Err
!
工作原理
用法
#[kotlike]
fn main() {
let a = "Hello".to_string();
let c = File::create("test.txt")?.write_all(a.as_bytes())?.clone();
let mut b: String = String::new();
let len = File::open("test.txt")?.read_to_string(&mut b)?.clone();
println!("Hello, {:?}({:?})!", b,len);
}
扩展宏的样式如下:
fn main() {
let a = "Hello".to_string();
let c: Option<()> = File::create("test.txt")
.map_or(None, |mut v| {
v.write_all(a.as_bytes())
.map_or(None, |mut v| Some(v.clone()))
});
let mut b: String = String::new();
let len: Option<usize> = File::open("test.txt")
.map_or(None, |mut v|{
v.read_to_string(&mut b)
.map_or(None, |mut v| Some(v.clone()))
});
println!("Hello, {:?}({:?})!", b,len);
}
上述示例仅显示其工作原理。不要过分关注这些愚蠢的代码。
许可证
依赖关系
~2.4–4MB
~71K SLoC