Skip to content

Commit 270701a

Browse files
authored
update P.NAM.03 && add new G.TYP.ENM.07 (#118)
* V 0.3 * V0.3: modify README * update Version to 0.3 * add code example for P.SEC.01 * modify P.SEC.01 * 3.30 review * update * update to 1.0 beta * fixed for P.NAM.01 * Improvement desc for P.NAM.05 && P.NAM.07 && P.UNS.MEM.04 * fixed code typo * update some items and add new items : p.uns.ffi.16-17-18 * fixed typo * update P.NAM.03 && add new G.TYP.ENM.07
1 parent e27e1a6 commit 270701a

File tree

3 files changed

+49
-2
lines changed

3 files changed

+49
-2
lines changed

src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@
111111
- [G.TYP.ENM.04 不宜在use语句中引入Enum的全部变体(variants)](./safe-guides/coding_practice/data-type/enum/G.TYP.ENM.04.md)
112112
- [G.TYP.ENM.05 对外导出的公开Enum,宜添加#[non_exhaustive]属性](./safe-guides/coding_practice/data-type/enum/G.TYP.ENM.05.md)
113113
- [G.TYP.ENM.06 Enum内变体的大小差异不宜过大](./safe-guides/coding_practice/data-type/enum/G.TYP.ENM.06.md)
114+
- [G.TYP.ENM.07 如需依赖 Enum 中变体的序数,则应显示为变体设置明确的数值](./safe-guides/coding_practice/data-type/enum/G.TYP.ENM.07.md)
114115
- [表达式](./safe-guides/coding_practice/expr.md)
115116
- [G.EXP.01 当需要对表达式求值后重新赋值时,宜使用复合赋值模式](./safe-guides/coding_practice/expr/G.EXP.01.md)
116117
- [G.EXP.02 不宜在比较中使用不兼容的位掩码](./safe-guides/coding_practice/expr/G.EXP.02.md)

src/safe-guides/code_style/naming/P.NAM.03.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ fn not_number(s:&str) -> bool {/* ... */}
3030
// 符合
3131
let first_name: &str = "John";
3232
let last_name: &str = "Smith";
33-
const ERROR_DIRECTORY_NOT_SUPPORTED: u32 = 336;
34-
const ERROR_DRIVER_CANCEL_TIMEOUT: u32 = 594;
33+
const ERR_DIR_NOT_SUPPORTED: u32 = 336;
34+
const ERR_DVER_CANCEL_TIMEOUT: u32 = 594;
3535
// 符合
3636
fn is_number(s:&str) -> bool {/* ... */}
3737
```
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
## G.TYP.ENM.07 如需依赖 Enum 中变体的序数,则应显示为变体设置明确的数值
2+
3+
**【级别】** 要求
4+
5+
**【描述】**
6+
7+
在日常开发中,有时需要产生出有独立名称,且为连续或是有规律的数值,用来当作接口的参数数值,一般采用枚举(Enum)来实现。
8+
9+
Rust 语言的枚举变体的序数(ordinal)依赖于它的定义顺序。在开发过程中,很有可能需要新增变体。一般情况下,都是从尾部追加变体,但不排除有人会从中间新增变体,或者,依赖于某些库将变体自动按字典序排序,这样就有可能打乱枚举变体本来到顺序,导致程序中依赖变体序数的代码产生逻辑错误。
10+
11+
所以,在这种情况下,我们需要为变体设置明确的数值
12+
13+
**【反例】**
14+
15+
```rust
16+
// 不符合
17+
enum Mode {
18+
Mode0, // 0
19+
Mode1, // 1
20+
Mode3, // 2
21+
Mode2, // 3
22+
}
23+
24+
fn main() {
25+
// 不符合:报错,此处 Mode::Mode3 对应值为 2 ,而不是 3
26+
assert_eq!(3, Mode::Mode3 as u8);
27+
}
28+
```
29+
30+
**【正例】**
31+
32+
```rust
33+
// 符合
34+
enum Mode {
35+
Mode0 = 0,
36+
Mode1 = 1,
37+
Mode3 = 3,
38+
Mode2 = 2,
39+
}
40+
41+
fn main() {
42+
// 符合
43+
assert_eq!(3, Mode::Mode3 as u8);
44+
}
45+
46+
```

0 commit comments

Comments
 (0)