use std::io::{Read, Result as IoResult}; use std::fs::File; struct Config(u8); fn read_config() -> IoResult<String> { let mut s = String::new(); let mut file = File::open(&get_local_config_path()) // 如果Result为Err,则调用or_else闭包。 .or_else(|_| File::open(&get_global_config_path()))?; // 注意:在`or_else`中,闭包应该返回带有匹配项的Result // 确定类型,而在`and_then`中,返回的Result应该有一个 // 匹配的Err类型。 let _ = file.read_to_string(&mut s)?; Ok(s) } struct ParseError; fn parse_config(conf_str: String) -> Result<Config, ParseError> { // 解析配置字符串... if conf_str.starts_with("bananas") { Err(ParseError) } else { Ok(Config(42)) } } fn run() -> Result<(), String> { //注意:此函数的错误类型为字符串。我们使用下面的map_err // 将错误值转换为String类型 let conf_str = read_config() .map_err(|e| format!("Failed to read config file: {}", e))?; // 注意:我们可以使用`and_then`来包装let而不是上面的`?`。 // 表达式如下。 let conf_val = parse_config(conf_str) .map(|Config(v)| v / 2) // map可用于仅映射Ok值 .map_err(|_| "无法解析配置字符串!".to_string())?; // 跑... Ok(()) } fn main() { match run() { Ok(_) => println!("Bye!"), Err(e) => println!("Error: {}", e), } } fn get_local_config_path() -> String { let user_config_prefix = "/home/user/.config"; // 获取用户配置目录的代码 format!("{}/my_app.rc", user_config_prefix) } fn get_global_config_path() -> String { let global_config_prefix = "/etc"; // 获取全局配置目录的代码 format!("{}/my_app.rc", global_config_prefix) }
如果配置文件不存在,则输出:
Error: Failed to read config file: No such file or directory (os error 2)
如果解析失败,则输出:
Error: 无法解析配置字符串!
注意:随着项目的发展,使用这些基本方法(文档)来处理错误会很麻烦,而又不会丢失有关错误的来源和传播路径的信息。同样,过早地将错误转换为字符串以处理多种错误类型绝对是一个坏习惯,如上所述。更好的方法是使用板条箱error-chain。
我使用的是JMockit1.1,我所要做的就是调用一个私有方法并测试返回值。然而,我很难从JMockit去封装示例中准确理解如何做到这一点。
本文向大家介绍Rust 结构域,包括了Rust 结构域的使用技巧和注意事项,需要的朋友参考一下 示例 这指定任何给定的实例Struct具有生命周期'a,并且&u32存储在x中的生命周期必须至少为'a。
现在我想实现的是: 如何组合来自UserFlux的响应,并使用类似group.addUsers(userfromFlux)的内容将这些用户与该组关联起来。 有人能帮助如何组合来自userFlux和GroupMono的结果吗。我想我使用了像Zip这样的东西,但它会从源代码进行一对一的映射。在我的例子中,我需要做1到N映射。这里我有一个组,但多个用户,我需要添加到该组。返回,然后将zip运算符与mon
本文向大家介绍Rust 如果让/而让,包括了Rust 如果让/而让的使用技巧和注意事项,需要的朋友参考一下 示例 if let 组合模式match和if语句,并允许进行简短的非详尽匹配。 这等效于: 这些块也可以具有else语句。 此块等效于: while let 组合模式匹配和while循环。 打印H+e+l+l+o+,+ +w+o+r+l+d+!+。 等效于使用loop {}和match语句:
我试图遵循下面的示例:https://rust-lang-nursery.github.io/rust-cookbook/web/scraping.html,它同时使用Reqwest和Select来获取html响应,然后解析数据。 我使用的是Reqwest Version0.10.4并选择Version0.4.3,这就是它在示例中显示的版本。然而,我得到了一个错误: 似乎from_read方法接受
问题内容: 我要找的东西对我来说似乎很简单,但是我的Google失败了。 我想要一个允许我运行任何查询并以json格式获取结果的方法。 诀窍是我 不 希望结果需要Java对象作为过程的一部分(DTO,VO等)。 有任何快速/简便/清洁的方法吗? 问题答案: 杰克逊有一些不错的方法。此答案中有一些示例可以为您带来奇迹。 另外,如果杰克逊不提供给你,你可以看看这个