- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个具有功能的 Rust 程序接受输入的‘is_input_sanitized’字符串 m,并检查输入是否没有特殊字符。该方法以下列方式在单独的函数上使用。
let a = match is_input_sanitized(m) {
Ok(m) => m,
Err(_) => { return Err("error"); },
};
我正在尝试将此代码段转换为使用“unwrap_or_else”,当输入未经过清理时,它将返回错误。我已阅读文档,但无法破译实现此目的的正确方法。这种转换可能吗?
最佳答案
unwrap_or_else
用于提取Result
值。在我看来,您不想提取 结果,而是想创建一个新结果并传播错误。你有两件不同的事情想在这里做。第一个是你想将错误从它开始的任何东西(由你的模式匹配中的 _
指示)更改为你控制的东西,第二个是你想要 return
错误。
替换错误可以用map_err
来完成,如果 Result
是 Err
,它接受一个函数(例如闭包)并将该函数应用于错误。如果结果为 Ok
,则返回未修改的当前 Result
。
第二个问题,返回Err
,正是question mark operator发明的目的。
Chaining results using match can get pretty untidy; luckily, the
?
operator can be used to make things pretty again.?
is used at the end of an expression returning aResult
, and is equivalent to a match expression, where theErr(err)
branch expands to an earlyreturn Err(From::from(err))
, and theOk(ok)
branch expands to anok
expression.
所以你要找的是
let a = is_input_sanitized(m).map_err(|_| "error")?;
关于rust - 在 Rust 中使用 unwrap_or_else 进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73023600/
这个问题在这里已经有了答案: Why should I prefer `Option::ok_or_else` instead of `Option::ok_or`? (3 个答案) 关闭 3 年前
我有一个具有功能的 Rust 程序接受输入的‘is_input_sanitized’字符串 m,并检查输入是否没有特殊字符。该方法以下列方式在单独的函数上使用。 let a = match is_in
我是一名优秀的程序员,十分优秀!