0
点赞
收藏
分享

微信扫一扫

rust 固定大小的值到值映射的 Hash

Hash trait 可以实例化一个任意大小的类型,并且能够用哈希(hash)函数将该实例映射到一个固定大

小的值上。派生 Hash 实现了 hash 方法。hash 方法的派生实现结合了在类型的每部分调用 hash 的结

果,这意味着所有的字段或值也必须实现了 Hash,这样才能够派生 Hash。

例如,在 HashMap<K, V> 上存储数据,存放 key 的时候,Hash 是必须的。

默认值的 Default

Default trait 使你创建一个类型的默认值。派生 Default 实现了 default 函数。default 函数的派生实现

调用了类型每部分的 default 函数,这意味着类型中所有的字段或值也必须实现了 Default,这样才能够

派生 Default 。

Default::default 函数通常结合结构体更新语法一起使用,这在第五章的 ” 使用结构体更新语法

从其他实例中创建实例” 部分有讨论。可以自定义一个结构体的一小部分字段而剩余字段则使用

.. Default::default() 设置为默认值。

例如,当你在 Option<T> 实例上使用 unwrap_or_default 方法时,Default trait 是必须的。如果

Option<T> 是 None的话, unwrap_or_default 方法将返回存储在 Option<T> 中 T 类型的 Default::default

的结果。

附录 D:实用开发工具

appendix-04-useful-development-tools.md > commit d48e9884f4e5ecb112095d4e8c55ebc3bce4b009

本附录,我们将讨论 Rust 项目提供的用于开发 Rust 代码的工具。

通过 rustfmt 自动格式化

rustfmt 工具根据社区代码风格格式化代码。很多项目使用 rustfmt 来避免编写 Rust 风格的争论:所有

人都用这个工具格式化代码!

安装 rustfmt:

$ rustup component add rustfmt

这会提供 rustfmt 和 cargo−fmt,类似于 Rust 同时安装 rustc 和 cargo。为了格式化整个 Cargo 项目:

$ cargo fmt

运行此命令会格式化当前 crate 中所有的 Rust 代码。这应该只会改变代码风格,而不是代码语义。请查

看 该文档 了解 rustfmt 的更多信息。

通过 rustfix 修复代码

如果你编写过 Rust 代码,那么你可能见过编译器警告。例如,考虑如下代码:

文件名: src∕main.rs

fn do_something() {}

fn main() {

for i in 0..100 {

do_something();

}

}

这里调用了 do_something 函数 100 次,不过从未在 for 循环体中使用变量 i。Rust 会警告说:

$ cargo build

Compiling myprogram v0.1.0 (file:///projects/myprogram)

warning: unused variable: `i`

--> src/main.rs:4:9

|

4 | for i in 1..100 {

| ^ help: consider using `_i` instead

|

= note: #[warn(unused_variables)] on by default

Finished dev [unoptimized + debuginfo] target(s) in 0.50s

警告中建议使用 _i 名称:下划线表明该变量有意不使用。我们可以通过 cargo fix 命令使用 rustfix 工具

来自动采用该建议:

586 CHAPTER 21. 附录

$ cargo fix

Checking myprogram v0.1.0 (file:///projects/myprogram)

Fixing src/main.rs (1 fix)

Finished dev [unoptimized + debuginfo] target(s) in 0.59s

如果再次查看 src∕main.rs,会发现 cargo fix 修改了代码:

文件名: src∕main.rs

fn do_something() {}

fn main() {

for _i in 0..100 {

do_something();

}

}

现在 for 循环变量变为 _i,警告也不再出现。

cargo fix 命令可以用于在不同 Rust 版本间迁移代码。版本在附录 E 中介绍。

举报

相关推荐

0 条评论