File tree Expand file tree Collapse file tree 3 files changed +49
-2
lines changed
coding_practice/data-type/enum Expand file tree Collapse file tree 3 files changed +49
-2
lines changed Original file line number Diff line number Diff line change 111
111
- [ G.TYP.ENM.04 不宜在use语句中引入Enum的全部变体(variants)] ( ./safe-guides/coding_practice/data-type/enum/G.TYP.ENM.04.md )
112
112
- [ G.TYP.ENM.05 对外导出的公开Enum,宜添加#[ non_exhaustive] 属性] ( ./safe-guides/coding_practice/data-type/enum/G.TYP.ENM.05.md )
113
113
- [ 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 )
114
115
- [ 表达式] ( ./safe-guides/coding_practice/expr.md )
115
116
- [ G.EXP.01 当需要对表达式求值后重新赋值时,宜使用复合赋值模式] ( ./safe-guides/coding_practice/expr/G.EXP.01.md )
116
117
- [ G.EXP.02 不宜在比较中使用不兼容的位掩码] ( ./safe-guides/coding_practice/expr/G.EXP.02.md )
Original file line number Diff line number Diff line change @@ -30,8 +30,8 @@ fn not_number(s:&str) -> bool {/* ... */}
30
30
// 符合
31
31
let first_name : & str = " John" ;
32
32
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 ;
35
35
// 符合
36
36
fn is_number (s : & str ) -> bool {/* ... */ }
37
37
```
Original file line number Diff line number Diff line change
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
+ ```
You can’t perform that action at this time.
0 commit comments