首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Rust中的Result枚举

Result枚举在Rust中是使用频率极高的一个类型,常用于函数的返回值定义,其源码如下: #[derive(Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash...(feature = "rust1", since = "1.0.0")] T), /// Contains the error value #[lang = "Err"] #...("{}", result); unwrap源码中的unwrap_failed继续追下去的话,可以看到: fn unwrap_failed(msg: &str, error: &dyn fmt::Debug..., msg, error) } 调用了panic方法,这意味着如果Result返回的是Err,则程序会崩溃,可以试一把: 如果Err发生时不希望程序崩溃,可以使用unwrap_or() let...("{}", result); 使用unwrap_or_else传入1个闭包匿名函数,可以随心所欲的对原始错误进行处理,这里我们啥也没干,|e|e,表示原样返回。

1.2K10

【Rust投稿】捋捋 Rust 中的 impl Trait 和 dyn Trait

Rust 之所以要求函数不能返回多种类型是因为 Rust 在需要在 编译期确定返回值占用的内存大小, 显然不同类型的返回值其内存大小不一定相同...., 并且还贴心的提示我们把 Box 改成 Boxdyn View>, 按编译器的提示修改代码, 此时代码 no warning, no error, 完美....但 impl Trait 和 Boxdyn Trait> 除了允许多种返回值类型的之外还有什么区别吗? trait object 又是什么?...为什么 Box 形式的返回值会被废弃而引入了新的 dyn 关键字呢? 埋坑 impl Trait 和 dyn Trait 在 Rust 分别被称为静态分发和动态分发....又因 trait object 与 Trait 在不引入 dyn 的情况下经常导致语义混淆, 所以 Rust 特地引入 dyn 关键字, 在 Rust 2018 中已经稳定.

2.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Rust采集天气预报信息并实时更新数据

    use std::net::TcpStream;use std::io::prelude::*;use std::error::Error;​fn main() -> ResultBoxdyn...std::net::TcpStream是用来建立网络连接的,std::io::prelude::*导入了一些预定义的IO操作函数,std::error::Error是Rust中定义错误类型的标准库。...这个函数会返回一个Result,如果连接成功,就返回一个Ok,包含一个TcpStream类型的值,表示连接的套接字。如果连接失败,就返回一个Err,包含一个表示错误的值。...每次读取,我们都使用stream.read函数,这个函数会返回一个Result,如果读取成功,就返回一个Ok,包含读取到的数据的长度,如果读取失败,就返回一个Err,包含一个表示错误的值。...最后,我们返回一个Ok,表示程序运行成功。如果在运行过程中发生错误,我们就返回一个Boxdyn Error>类型的值,表示错误。

    13710

    Rust特征对象(Trait Object)

    ("f64: {}", *self) } } // 若 T 实现了 Draw 特征, 则调用该函数时传入的 Box 可以被隐式转换成函数参数签名中的 Boxdyn Draw> fn draw1...我们可以在一个Vector中存放特征对象,从而实现不同类型的存储的容器。注意&dyn和Boxdyn>都是在编译期已知大小的。关于特征对象的动态分发请看这里。...如果一个 trait 中定义的所有方法都符合以下规则,则该 trait 是对象安全的: 返回值不是 Self 没有泛型类型的参数 Self 关键字是我们在 trait 与方法上的实现的别称,trait...对象必须是对象安全的,因为一旦使用 trait 对象,Rust 将不再知晓该实现的返回类型。...例如: // 若 T 实现了 Draw 特征, 则调用该函数时传入的 Box 可以被隐式转换成函数参数签名中的 Boxdyn Draw> fn draw1(x: Boxdyn Draw>) {

    1K40

    【Rust每周一库】hyper - 底层http库

    hyper是一个偏底层的http库,支持HTTP/1和HTTP/2,支持异步Rust,并且同时提供了服务端和客户端的API支持。...(关于Rust中各种网络开发框架,这里有个很全面的综述和比较。)所以如果在使用这些框架的时候遇到了一些问题,对hyper的了解肯定是有一定的帮助的。...再者学习Rust的我们都是奔着成为大佬的路线去的,很难说不会有直接操作偏底层框架的需求。 Hello World 我们首先来实现一个简单的服务器端和客户端,支持最简单的GET操作。...tokio::io::{stdout, AsyncWriteExt as _}; #[tokio::main] async fn main() -> ResultBoxdyn std::error...::main] async fn main() -> ResultBoxdyn std::error::Error + Send + Sync>> { let req = Request

    3.2K21

    Rust 开发命令行工具(上)

    以下是完整示例: fn main() -> ResultBoxdyn std::error::Error>> { let result = std::fs::read_to_string...("文件内容:{}", content); Ok(()) } 我们来简单对每行代码做一次解释: fn main() -> ResultBoxdyn std::error::Error...例如,我们main函数中的错误类型是Boxdyn std::error::Error>。但是我们已经看到read_to_string返回的是std::io::Error。这是因为?...扩展为转换错误类型的代码。 ❞ ❝同时,Boxdyn std::error::Error>也是一个有趣的类型。它是一个Box,可以包含任何实现标准Error trait的类型。...这意味着基本上所有错误都可以放入这个Box中,因此我们可以在所有通常返回Result的函数上使用?。 ❞ 有关Box的使用原理和介绍可以参考Rust智能指针 ---- 为错误提供合适的语境提示 使用?

    82140
    领券