man*_*nth 16 naming-conventions rust
根据标准库示例,我的理解是:
into_
当函数完全吸收所有权并吐出另一种类型时,使用约定,如 中所示into_iter()
。理解正确吗?
真正的混乱在于as_
和之间to_
。
似乎to_
into_owned()
接受类型的引用并吐出一个新的相关类型(如类型强制),而 asto_string()
接受类型的引用并吐出一个新类型(如类型转换)。
但as_
似乎as_ptr
也像类型强制。as_ptr
除了或 之外,我找不到任何例子as_mut
。
有人可以准确解释我们需要使用特定命名约定的情况以及超出标准库中使用的现实生活示例吗?
kmd*_*eko 19
Rust API 指南中有一个命名部分,其中包括“转换”方法的建议并显示了一个方便的表格:
字首 | 成本 | 所有权 |
---|---|---|
as_ |
自由的 | 借来 -> 借来 |
to_ |
昂贵的 | 借用 -> 借用 借用 -> 拥有(非复制类型) 拥有 -> 拥有(复制类型) |
into_ |
多变的 | 拥有 -> 拥有(非复制类型) |
该指南继续提供了诸如str::as_bytes()
、str::to_lowercase()
、String::into_bytes()
等示例以及抽象和可变性的一些其他注意事项。
一种更快的思考方式:
into_*
as_*
to_*
标准库和大多数生态系统包几乎都遵循这些规则。与往常一样,这些更多的是指导方针,而不是实际规则。约定很有帮助,但不需要严格遵守。