Rust 程序设计语言 简体中文版 1.85.0新构建代码,都会生成相同的构建 产物:Cargo 只会使用你指定的依赖版本,除非你明确指定其他版本。例如,如果下周 rand crate 的 0.8.6 版本出来了,该版本包含了一个重要的 bug 修复,但同时也引入了一个会破坏 你代码的回归问题。为了解决这个问题,Rust 在你第一次运行 cargo build 时创建了 Cargo.lock 文件,我们现在可以在 guessing_game 目录找到它。 i32 类型的值,不过语句并不会返回值,使用单位类型 () 表示不返回值。因为不返回值与函数定义相矛盾,从而出现一个错误。在输出中,Rust 提供 了一条信息,可能有助于纠正这个错误:它建议删除分号,这会修复这个错误。 56/562Rust 程序设计语言 简体中文版 注释 所有程序员都力求使其代码易于理解,不过有时还需要提供额外的解释。在这种情况下,程序 员在源码中留下 注释(comments), `ownership` (bin "ownership") due to 1 previous error 正如变量默认是不可变的,引用也一样。(默认)不允许修改引用的值。 可变引用 我们通过一个小调整就能修复示例 4-6 代码中的错误,允许我们修改一个借用的值,这就是 可变引用(mutable reference): 文件名:src/main.rs fn main() { let mut s0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版有一个机制来确保任何人在任何时候重新构建代码,都会产生相同的结果:Cargo 只会 使用你指定的依赖版本,除非你又手动指定了别的。例如,如果下周 rand crate 的 0.8.6 版 本出来了,它修复了一个重要的 bug,同时也含有一个会破坏代码运行的缺陷。为了处理这个 问题,Rust 在你第一次运行 cargo build 时建立了 Cargo.lock 文件,我们现在可以在 guessing_game 类型的值,不过语句并不会返回值,使用单位类型 () 表示不返回值。因为不返回值与函数定义相矛盾,从而出现一个错误。在输出中,Rust 提 供了一条信息,可能有助于纠正这个错误:它建议删除分号,这会修复这个错误。 60/600 Rust 程序设计语言 简体中文版 3 . 4 . 注 释 注释 ch03-04-comments.md commit d0acb2595c89 could not compile `ownership` due to previous error 正如变量默认是不可变的,引用也一样。(默认)不允许修改引用的值。 可变引用 我们通过一个小调整就能修复示例 4-6 代码中的错误,允许我们修改一个借用的值,这就是 可变引用(mutable reference): 文件名:src/main.rs fn main() { let mut s0 码力 | 600 页 | 12.99 MB | 1 年前3
Comprehensive Rust(简体中文) 202412警告。Clippy 提供了大量的 lint 文档,并且在不断添加新的 lint(包括默认拒绝 lint)。 请注意,带有 help: ... 的错误或警告可以通过 cargo Fix 或编辑器进行修复。 27.4 练习:卢恩算法 卢恩算法 卢恩算法用于验证信用卡号。该算法将字符串作为输入内容,并执行以下操作来验证信用卡号: • Ignore all spaces. Reject number 以下代码实现了一个非常简单的表达式语言解析器。不过,它通过 panic 机制来处理错误。请重写该代 码,改用惯用的错误处理方式,并将错误传播到 main 函数的返回值。您可以随意使用 thiserror 和 anyhow。 提示:请先修复 parse 函数中的错误处理问题。该部分正常运行后,请更新 Tokenizer 以实现 Iterator- >,并在解析器中进行相应处理。 命令可能会下载以下内容: • Your crate • 直接依赖项和传递依赖项 • cargo 要求的其他 crate 的新版本,用于解析 Chromium 所需的全部 crate。 Chromium 会修复一些 crate 的补丁,并将其保存在//third_party/rust/chromium_crates_io/patches 中。系统会自动重新应用这些补丁,但如果补丁应用失败,您可能需要进行手动操作。
0 码力 | 359 页 | 1.33 MB | 10 月前3
Hello 算法 1.1.0 Rust版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为堆化(heapify)。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 // 节点 i 已经是堆顶节点了,结束堆化 if i == 0 { break; } // 获取节点 i 的父节点 let p = Self::parent(i); // 当“节点无须修复”时,结束堆化 if self.max_heap[i] <= self.max_heap[p] { break; } // 交换两节点 self.swap(i, p); // 循环向上堆化 循环向上堆化 i = p; } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化进行修复变得困难。为了尽量减少元素索引的变动,我们采用以 下操作步骤。 1. 交换堆顶元素与堆底元素(交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,因此实际上删除的是原来的堆顶元素)。0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为堆化(heapify)。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 // 节点 i 已经是堆顶节点了,结束堆化 if i == 0 { break; } // 获取节点 i 的父节点 let p = Self::parent(i); // 当“节点无须修复”时,结束堆化 if self.max_heap[i] <= self.max_heap[p] { break; } // 交换两节点 self.swap(i, p); // 循环向上堆化 循环向上堆化 i = p; } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化进行修复变得困难。为了尽量减少元素索引的变动,我们采用以 下操作步骤。 1. 交换堆顶元素与堆底元素(交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,因此实际上删除的是原来的堆顶元素)。0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能 已被破坏,因此需要修复从插入节点到根节点的路径上的各个节点,这个操作被称为「堆化 heapify」。 考虑从入堆节点开始,从底至顶执行堆化。如图 8‑3 所示,我们比较插入节点与其父节点的值,如果插入节 点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须 交换的节点时结束。 第 8 章 堆 // 节点 i 已经是堆顶节点了,结束堆化 if i == 0 { break; } // 获取节点 i 的父节点 let p = Self::parent(i); // 当“节点无须修复”时,结束堆化 if self.max_heap[i] <= self.max_heap[p] { break; } // 交换两节点 self.swap(i, p); // 循环向上堆化 循环向上堆化 i = p; } } 4. 堆顶元素出堆 堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的 索引都会发生变化,这将使得后续使用堆化进行修复变得困难。为了尽量减少元素索引的变动,我们采用以 下操作步骤。 1. 交换堆顶元素与堆底元素(交换根节点与最右叶节点)。 2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,因此实际上删除的是原来的堆顶元素)。0 码力 | 383 页 | 17.61 MB | 1 年前3
共 6 条
- 1













