问题描述
我如何知道在 Rust 中通过 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="libs/v6.5.0/css/ol.css" type="text/css">
<link rel="stylesheet" href="libs/v6.5.0/examples/resources/layout.css" type="text/css">
<link rel="stylesheet" href="libs/ol-ext-master/dist/ol-ext.css" />
<link rel="stylesheet" href="libs/jquery-ui-1.12.1/jquery-ui.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
</head>
<body>
<div id="title"> <marquee behavior="scroll" direction="right"><h5><b>Title goes here</b></h5>
</marquee></div>
<!-- MODAL WINDOW -->
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Welcome to web-map app!</h5>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<div class="modal-body">
<img class="capimg" src="https://sss.jpg" width="300" height="100" />
<p style="text-align:justify">Text here</p>
</div>
</div>
</div>
</div>
<div id="map">
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script>
<script src="libs/v6.5.0/build/ol.js"></script>
<script src="libs/ol-layerswitcher-master/dist/ol-layerswitcher.js"></script>
</body>
</html>
管道 Result
时发生了什么错误?例如使用嵌套匹配我可以这样做:
and_then
或者我可以使用 use std::num::ParseIntError;
fn get_num(n: u8) -> Result<u8,ParseIntError> {
// Force a ParseIntError
"foo ".parse()
}
fn add_one(n: u8) -> Result<u8,ParseIntError> {
Ok(n + 1)
}
fn main() {
match get_num(1) {
Ok(n) => {
match add_one(n) {
Ok(n) => println!("adding one gives us: {}",n),Err(why) => println!("Error adding: {}",why)
}
},Err(why) => println!("Error getting number: {}",why),}
}
将第一个函数的结果通过管道传递给第二个函数并避免嵌套匹配:
and_then
如何使用 match get_num(1).and_then(add_one) {
Ok(n) => println!("Adding one gives us: {}",Err(why) => println!("Some error: {}.",why)
}
有条件地、惯用地确定第二种形式的错误?我必须键入检查错误吗?当然我可以像上面那样显示错误,但假设我想用与错误类型相关的内容作为开头?
解决方法
通常的方法是使用 map_err
将初始错误转换为您可以控制的更丰富的内容,例如
enum MyError {
Parsing,Adding
}
get_num(1).map_err(|_| MyError::Parsing)
.and_then(|v| add_one(v).map_err(|_| MyError::Adding)
遗憾的是,正如您所见,这需要对 and_then
回调使用 lambda:and_then
必须返回与输入相同的错误类型,因此在这里它必须产生一个 Result<_,MyError>
, wj 这不是 add_one
的返回类型。
虽然在其他情况下我们可以使用 ?
进行一些恢复,但这里相同的原始错误 type 被分成两个不同的值。