Rust 语言学习笔记10.1.2 unwrap 与 expect ............................................................. 114 11.1.3 传播错误与传播错误的简写 ................................................ 114 10.2 Any 和反射 ....................... println!("{}", x); //output //100 //2 } //一般理解,*v 操作,是 &v 的反向操作, //即试图由资源的引用获取到资源的拷贝(如果资源类型实现了 Copy),或所有权(资源类型没有实 现 Copy)。 { let mut x = String::from("hello"); trait 能够从任意引用类型实例,生成具有所有权的类型实例。 6.6.4 Deref Deref 是 deref 操作符 * 的 trait,比如 *v。 一般理解,*v 操作,是 &v 的反向操作,即试图由资源的引用获取到资源 的拷贝(如果资源类型实现了 Copy),或所有权(资源类型没有实现 Copy)。 6.6.4.1 强制解引 这种隐式转换的规则为: 一个类型为 T 的对象0 码力 | 117 页 | 2.24 MB | 1 年前3
Comprehensive Rust(简体中文) 202412types. 29.6 练习:使用 Result 进行重写 以下代码实现了一个非常简单的表达式语言解析器。不过,它通过 panic 机制来处理错误。请重写该代 码,改用惯用的错误处理方式,并将错误传播到 main 函数的返回值。您可以随意使用 thiserror 和 anyhow。 提示:请先修复 parse 函数中的错误处理问题。该部分正常运行后,请更新 Tokenizer 以实现 Iter 灵版 Chrome! • UTF16 与 UTF8。学生应注意,Rust 字符串始终采用 UTF8 编码,它们可能会决定在 C++ 端使用 base::UTF16ToUTF8 进行转换,然后再进行反向转换。 • 如果学生决定在 Rust 端进行转换,则需要考虑使用 String::from_utf16 方法,同时注意错误 处理,并确定哪些 CXX 支持的类型可以传输大量 u16s。 • 学生可以通过多种方式设计0 码力 | 359 页 | 1.33 MB | 10 月前3
Rust 程序设计语言简体中文版unwrap 并提供更多关于为何 操作期望是一直成功的上下文。如此如果该假设真的被证明是错的,你也有更多的信息来用于 调试。 传播错误 当编写一个其实先会调用一些可能会失败的操作的函数时,除了在这个函数中处理错误外,还 可以选择让调用者知道这个错误并决定该如何处理。这被称为 传播(propagating)错误,这 样能更好的控制代码调用,因为比起你代码所拥有的上下文,调用者可能拥有更多信息或逻辑 来决定应该如何处理错误。 并使程序崩溃、使用一个默认的用户名或者从文件之外的地方寻找用户名。我 们没有足够的信息知晓调用者具体会如何尝试,所以将所有的成功或失败信息向上传播,让他 们选择合适的处理方法。 这种传播错误的模式在 Rust 是如此的常见,以至于 Rust 提供了 ? 问号运算符来使其更易于 处理。 传播错误的简写:? 运算符 示例 9-7 展示了一个 read_username_from_file 的实现,它实现了与示例 Result 的值是 Ok ,这个表达式将会返回 Ok 中的值而程序将继续执 行。如果值是 Err ,Err 将作为整个函数的返回值,就好像使用了 return 关键字一样,这 样错误值就被传播给了调用者。 示例 9-6 中的 match 表达式与 ? 运算符所做的有一点不同:? 运算符所使用的错误值被传递 给了 from 函数,它定义于标准库的 From trait 中,其用来将错误从一种类型转换为另一种类0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0作期望是一直成功的上下文。如此如果该假设真的被证明是错的,你也有更多的信息来用于调 试。 177/562Rust 程序设计语言 简体中文版 传播错误 当函数的实现中调用了可能会失败的操作时,除了在这个函数中处理错误外,还可以选择让调 用者知道这个错误并决定该如何处理。这被称为传播(propagating)错误,这样能更好的控 制代码调用,因为比起你代码所拥有的上下文,调用者可能拥有更多信息或逻辑来决定应该如 并使程序崩溃、使用一个默认的用户名或者从文件之外的地方寻找用户名。我们 没有足够的信息知晓调用者具体会如何尝试,所以将所有的成功或失败信息向上传播,让他们 选择合适的处理方法。 这种传播错误的模式在 Rust 是如此的常见,以至于 Rust 提供了 ? 问号运算符来来简化这一 过程。 传播错误的快捷方式:? 运算符 示例 9-7 展示了一个 read_username_from_file 的实现,它实现了与示例 相同的工作方式。如果 Result 的值是 Ok,这个表达式将会返回 Ok 中的值而程序将继续执行。 如果值是 Err,Err 将作为整个函数的返回值,就好像使用了 return 关键字一样,这样错误 值就被传播给了调用者。 示例 9-6 中的 match 表达式与 ? 运算符所做的有一点不同:? 运算符所使用的错误值被传递给 了 from 函数,它定义于标准库的 From trait 中,其用来将错误从一种类型转换为另一种类型。0 码力 | 562 页 | 3.23 MB | 26 天前3
Rust API可靠性分析与验证使用变异后的种子执行程序 No Rust China Conf 2021 – 2022, Online, China RULF:模糊测试用例程序生成 带有剪枝 的BFS 生成API调用序列 反向搜索 合并与优 化 模糊测试用例程序 短序列 长序列 最优序列 集合 合并 优化 构建API依赖图 合成合法的测试 函数 Rust库源代码 泛型函数 单态化 所有权检查 开源于https://github0 码力 | 13 页 | 1.68 MB | 1 年前3
Hello 算法 1.1.0 Rust版肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 第 15 章 贪心 hello‑algo.com 363 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。 图 15‑10 向内移动短板后的状态0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 第 15 章 贪心 www.hello‑algo.com 362 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。 图 15‑10 向内移动短板后的状态0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版肯定变小;而高度由短板决定,因此高度只可能不变(? 仍为短板)或 变小(移动后的 ? 成为短板)。 第 15 章 贪心 hello‑algo.com 361 图 15‑9 向内移动长板后的状态 反向思考,我们只有向内收缩短板 ? ,才有可能使容量变大。因为虽然宽度一定变小,但高度可能会变大(移 动后的短板 ? 可能会变长)。例如在图 15‑10 中,移动短板后面积变大。 图 15‑10 向内移动短板后的状态0 码力 | 383 页 | 17.61 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Rust 版肯定變小;而高度由短板決定,因此高度只可能不變(? 仍為短板)或 變小(移動後的 ? 成為短板)。 第 15 章 貪婪 www.hello‑algo.com 363 圖 15‑9 向內移動長板後的狀態 反向思考,我們只有向內收縮短板 ? ,才有可能使容量變大。因為雖然寬度一定變小,但高度可能會變大(移 動後的短板 ? 可能會變長)。例如在圖 15‑10 中,移動短板後面積變大。 圖 15‑10 向內移動短板後的狀態0 码力 | 388 页 | 18.82 MB | 10 月前3
共 9 条
- 1













