以下是我正在使用的一些代码的一个非常简化的版本:

fn my_func(i: i32) -> Result<i32, String> {
    match i {
        42 => Ok(113),
        _ => Err("Can only use 42".to_string())
    }
}

fn main() {
    if my_func(42).is_ok() {
        println!("its ok");
    }
}

main()内,还有一大堆其他if条语句.

我所需要的就是,如果my_func(42)可以,在println语句中打印结果.

我希望能够写出这样的东西

fn my_func(i: i32) -> Result<i32, String> {
    match i {
        42 => Ok(113),
        _ => Err("Can only use 42".to_string())
    }
}

fn main() {
    if (let result = my_func(42)).is_ok() {
        println!("its ok, and result is: {:?}", result);
    }
}

怎样才是正确的写法呢?

推荐答案

你要找的是if let种图案.

if let Ok(result) = my_func(42) {
  println!("It's ok, and result is {:?}", result);
}

if lettry 将左侧的模式(在本例中为Ok(result))与右侧的值绑定.如果绑定成功(即,如果my_func(42)实际上是Ok值),则绑定模式中的变量,并运行块的内部.如果不是,则跳过该块.

Rust相关问答推荐

如何为utoipa中的可选查询参数生成OpenAPI模式?

为什么Rust函数的移植速度比C++慢2倍?

为什么铁 rust S似乎有内在的易变性?

如何正确重新排列代码以绕过铁 rust 借入判断器?

如果死 struct 实现了/派生了一些特征,为什么Rust会停止检测它们?

如何将实现多个特征的 struct 传递给接受这些特征为&;mut?

在运行特定测试时,如何 suppress cargo test 的空输出?

使用 pyo3 将 Rust 转换为 Python 自定义类型

使用启用优化的 alloc 会导致非法指令崩溃

为什么 js_sys Promise::new 需要 FnMut?

Rust LinkedList 中的borrow 判断器错误的原因是什么?

通过写入 std::io::stdout() 输出不可见

如何正确使用git2::Remote::push?

将泛型中的 Box 转换为 rust 中的 Box

如何为整数切片定义一个带有额外函数的特性别名?

错误:将自定义 proc_macro 与用Rust 的宝贝编写的属性一起使用时,无法在此范围内找到属性

用逗号分隔字符串,但在标记中使用逗号

相交着色器从 SSBO 中读取零

list 中没有指定目标 - 必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分

您不能borrow 对只读值的可变引用