From 1158b37017291b81825596b9c3dc0d3cf9c73863 Mon Sep 17 00:00:00 2001 From: surechen Date: Fri, 26 Nov 2021 16:58:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9G.VAR.01=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=80=BC=E4=BA=A4=E6=8D=A2=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/safe-guides/coding_practice/variables.md | 25 +++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/safe-guides/coding_practice/variables.md b/src/safe-guides/coding_practice/variables.md index c6fb9028..6419ba59 100644 --- a/src/safe-guides/coding_practice/variables.md +++ b/src/safe-guides/coding_practice/variables.md @@ -82,20 +82,27 @@ let data = { --- -## G.VAR.01 交换两个变量的值应该使用 `std::mem::swap` 而非赋值 +## G.VAR.01 交换两个变量的值应该使用 `swap` 而非赋值 -### 【级别:必须】 +### 【级别:建议】 -必须按此规范执行。 +建议按此规范执行。 +对于 -### 【Lint 检测】 +| lint name | Clippy 可检测 | Rustc 可检测 | Lint Group | 是否可定制 | +| ------------------------------------------------------------ | ------------- | ------------ | ---------- | ----- | +| _ | no | no | _ | yes | + +【定制化参考】 -| lint name | Clippy 可检测 | Rustc 可检测 | Lint Group | level | -| ------ | ---- | --------- | ------ | ------ | -| [almost_swapped](https://rust-lang.github.io/rust-clippy/master/#almost_swapped) | yes| no | Correctness | deny | +这条规则如果需要定制Lint,则可以检测变量赋值操作,识别交换语义,推荐用户使用 `swap` 函数。 ### 【描述】 +对于包含 `swap` 方法的类型,如 `ptr`、`slice`、`Cell`、`RefCell`、`VecDeque` 等建议使用该类型的 `swap` 方法进行交换。 + +对其他类型可以使用函数 `std::mem::swap` 进行变量值的交换。 + 【正例】 ```rust @@ -109,8 +116,10 @@ std::mem::swap(&mut a, &mut b); ```rust let mut a = 1; let mut b = 2; +let mut c = 0; // 辅助交换的变量 +c = a; a = b; -b = a; +b = c; ```