Rust 中 ? 运算符的作用是什么?

推荐答案

在 Rust 中,? 运算符用于简化错误处理。它通常用于返回 ResultOption 类型的函数中。当 ResultErrOptionNone 时,? 运算符会提前返回错误或 None,否则它会解包 ResultOption 中的值并继续执行。

本题详细解读

? 运算符的基本用法

? 运算符主要用于简化错误处理代码。假设你有一个返回 Result<T, E> 的函数,你可以在函数内部使用 ? 来处理可能的错误。如果 ResultOk(value)? 会解包并返回 value;如果 ResultErr(e)? 会提前返回 Err(e)

-- -------------------- ---- -------
-- --------- ---- -- ---- -- ----------- ------- -
    -- - -- - -
        ------ ------------- -- -------------------
    -
    ---- - --
-

-- ------------ ---- -- ---- -- ----------- ------- -
    --- ------ - --------- ----
    --------- - ---
-

在上面的例子中,divide(a, b)? 会检查 divide 函数的返回值。如果 divide 返回 Errcalculate 函数会立即返回该错误;否则,result 会被赋值为 divide 返回的 Ok 值。

? 运算符与 Option 类型

? 运算符也可以用于 Option 类型。如果 OptionNone? 会提前返回 None;否则,它会解包 Some(value) 并继续执行。

-- -------------------- ---- -------
-- ---------------------- ---- -- -------------- -
    -- --------------
    -- ------- -- - -
        -------------------------
    - ---- -
        ----
    -
-

-- ------------------- ---- -- -------------- -
    --- -------- - ------------------------
    -------------------- ----- ----------
-

在这个例子中,find_username(user_id)? 会检查 find_username 的返回值。如果 find_username 返回 Nonegreet_user 函数会立即返回 None;否则,username 会被赋值为 find_username 返回的 Some 值。

? 运算符的限制

? 运算符只能在返回 ResultOption 的函数中使用。如果你在一个返回 () 或其他类型的函数中使用 ?,编译器会报错。

? 运算符与 try!

在 Rust 的早期版本中,try! 宏用于处理 Result 类型的错误。? 运算符是 try! 宏的语法糖,提供了更简洁的错误处理方式。

在现代 Rust 代码中,推荐使用 ? 运算符来替代 try! 宏。

纠错
反馈