match不能用枚举方法匹配数值类型

这里有一个震惊的事实就是 match 居然不能用枚举方法匹配数值类型,也就是说 enum 是非常特殊的一种类型。譬如说下面的代码是可行的:

enum Title {
    What,
    The,
    Fuck,
    Rust,
}

fn main() {
    let bar = Title::Fuck;
    match bar {
        Title::What => println!("What"),
        Title::The => println!("The"),
        Title::Fuck => println!("Fuck"),
        Title::Rust => println!("Rust"), 
    }
}

然而如果我们用穷举的方法去处理 u8 这种可怜的数值类型的时候:

fn main() {
    let fuck: u8 = 0;
    match fuck {
        0 => {}
        1 => {}
        2 => {}
        3 => {}
        4 => {}
        5 => {}
        6 => {}
        7 => {}
        8 => {}
        9 => {}
        10 => {}
        11 => {}
        12 => {}
        13 => {}
        14 => {}
        15 => {}
        16 => {}
        17 => {}
        18 => {}
        19 => {}
        20 => {}
        21 => {}
        22 => {}
        23 => {}
        24 => {}
        25 => {}
        26 => {}
        27 => {}
        28 => {}
        29 => {}
        30 => {}
        31 => {}
        32 => {}
        33 => {}
        34 => {}
        35 => {}
        36 => {}
        37 => {}
        38 => {}
        39 => {}
        40 => {}
        41 => {}
        42 => {}
        43 => {}
        44 => {}
        45 => {}
        46 => {}
        47 => {}
        48 => {}
        49 => {}
        50 => {}
        51 => {}
        52 => {}
        53 => {}
        54 => {}
        55 => {}
        56 => {}
        57 => {}
        58 => {}
        59 => {}
        60 => {}
        61 => {}
        62 => {}
        63 => {}
        64 => {}
        65 => {}
        66 => {}
        67 => {}
        68 => {}
        69 => {}
        70 => {}
        71 => {}
        72 => {}
        73 => {}
        74 => {}
        75 => {}
        76 => {}
        77 => {}
        78 => {}
        79 => {}
        80 => {}
        81 => {}
        82 => {}
        83 => {}
        84 => {}
        85 => {}
        86 => {}
        87 => {}
        88 => {}
        89 => {}
        90 => {}
        91 => {}
        92 => {}
        93 => {}
        94 => {}
        95 => {}
        96 => {}
        97 => {}
        98 => {}
        99 => {}
        100 => {}
        101 => {}
        102 => {}
        103 => {}
        104 => {}
        105 => {}
        106 => {}
        107 => {}
        108 => {}
        109 => {}
        110 => {}
        111 => {}
        112 => {}
        113 => {}
        114 => {}
        115 => {}
        116 => {}
        117 => {}
        118 => {}
        119 => {}
        120 => {}
        121 => {}
        122 => {}
        123 => {}
        124 => {}
        125 => {}
        126 => {}
        127 => {}
        128 => {}
        129 => {}
        130 => {}
        131 => {}
        132 => {}
        133 => {}
        134 => {}
        135 => {}
        136 => {}
        137 => {}
        138 => {}
        139 => {}
        140 => {}
        141 => {}
        142 => {}
        143 => {}
        144 => {}
        145 => {}
        146 => {}
        147 => {}
        148 => {}
        149 => {}
        150 => {}
        151 => {}
        152 => {}
        153 => {}
        154 => {}
        155 => {}
        156 => {}
        157 => {}
        158 => {}
        159 => {}
        160 => {}
        161 => {}
        162 => {}
        163 => {}
        164 => {}
        165 => {}
        166 => {}
        167 => {}
        168 => {}
        169 => {}
        170 => {}
        171 => {}
        172 => {}
        173 => {}
        174 => {}
        175 => {}
        176 => {}
        177 => {}
        178 => {}
        179 => {}
        180 => {}
        181 => {}
        182 => {}
        183 => {}
        184 => {}
        185 => {}
        186 => {}
        187 => {}
        188 => {}
        189 => {}
        190 => {}
        191 => {}
        192 => {}
        193 => {}
        194 => {}
        195 => {}
        196 => {}
        197 => {}
        198 => {}
        199 => {}
        200 => {}
        201 => {}
        202 => {}
        203 => {}
        204 => {}
        205 => {}
        206 => {}
        207 => {}
        208 => {}
        209 => {}
        210 => {}
        211 => {}
        212 => {}
        213 => {}
        214 => {}
        215 => {}
        216 => {}
        217 => {}
        218 => {}
        219 => {}
        220 => {}
        221 => {}
        222 => {}
        223 => {}
        224 => {}
        225 => {}
        226 => {}
        227 => {}
        228 => {}
        229 => {}
        230 => {}
        231 => {}
        232 => {}
        233 => {}
        234 => {}
        235 => {}
        236 => {}
        237 => {}
        238 => {}
        239 => {}
        240 => {}
        241 => {}
        242 => {}
        243 => {}
        244 => {}
        245 => {}
        246 => {}
        247 => {}
        248 => {}
        249 => {}
        250 => {}
        251 => {}
        252 => {}
        253 => {}
        254 => {}
        255 => {}
    }
}

您就会得到:

error[E0004]: non-exhaustive patterns: `_` not covered
--
>
 src/main.rs:3:11
  |
3 |     match foo {
  |           ^^^ pattern `_` not covered

error: aborting due to previous error

关于此问题的讨论有很多issue: #12483#30578#45590

results for ""

    No results matching ""