为匹配运算符借用可能未初始化的变量

dra*_*aze 5 rust

我正在设计一个库,它将给定的字符串从乌克兰语音译为英语,因此我决定使用“匹配”运算符来定义带有多个条件检查的语句。但我遇到了编译器错误,这对于 Rust 来说是典型的,但在我的情况下完全不可能(至少我这么认为)。

\n\n
\n   --> src/lib.rs:188:21\n    |\n188 |  origin_mutated[i] = 'Y';\n    |  ^^^^^^^^^^^^^^ use of possibly-uninitialized `origin_mutated`\n\nerror: aborting due to previous error\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是库的完整代码。如果我没有看到明显的东西,请让我遇到问题(因为我怀疑这可能是编译器中的错误)

\n\n
pub fn transliterate(mut origin: String) -> String {\n    let counter: usize = origin.chars().count();\n    let mut j: usize = 0;\n    let mut i: usize = 0;\n    let origin_vec: Vec<char> = origin.chars().collect();\n    let mut origin_mutated: Vec<char>;\n    if j <= counter{\n        while j <= counter {\n            match origin_vec[j] {\n                '\xd0\x90' => {\n                    origin_mutated[i] = 'A';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x91' => {\n                    origin_mutated[i] = 'B';\n                    j+=1;\n                    i+=1;\n                    },\n                '\xd0\x92' => {\n                    origin_mutated[i] = 'V';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x93' => {\n                    origin_mutated[i] = 'H';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd2\x90' => {\n                    origin_mutated[i] = 'G';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x94' => {\n                    origin_mutated[i] = 'D';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x95' => {\n                    origin_mutated[i] = 'E';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x84' => {\n                    origin_mutated[i] = 'Y';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'e';\n                    i+=1;\n                    },\n                '\xd0\x96' => {\n                    origin_mutated[i] = 'Z';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'h';\n                    i+=1;\n                    },\n                '\xd0\x97' => {\n                    origin_mutated[i] = 'Z';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x98' => {\n                    origin_mutated[i] = 'Y';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x86' => {\n                    origin_mutated[i] = 'I';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x87' => {\n                    origin_mutated[i] = 'Y';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'i';\n                    i+=1;\n                    },\n                '\xd0\x99' => {\n                    origin_mutated[i] = 'Y';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x9a' => {\n                    origin_mutated[i] = 'K';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x9b' => {\n                    origin_mutated[i] = 'L';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x9c' => {\n                    origin_mutated[i] = 'M';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x9d' => {\n                    origin_mutated[i] = 'N';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\x9e' => {\n                    origin_mutated[i] = 'O';\n                    i==1;\n                    j+=1;\n                    },\n                '\xd0\x9f' => {\n                    origin_mutated[i] = 'P';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\xa0' => {\n                    origin_mutated[i] = 'R';\n                    i==1;\n                    j+=1;\n                    },\n                '\xd0\xa1' => {\n                    origin_mutated[i] = 'S';\n                    i==1;\n                    j+=1;\n                    },\n                '\xd0\xa2' => {\n                    origin_mutated[i] = 'T';\n                    i==1;\n                    j+=1;\n                    },\n                '\xd0\xa3' => {\n                    origin_mutated[i] = 'U';\n                    i+=1;\n                    j+=1;\n                    },\n                '\xd0\xa4' => {\n                    origin_mutated[i] = 'F';\n                    i==1;\n                    j+=1;\n                    },\n                '\xd0\xa5' => {\n                    origin_mutated[i] = 'K';\n                    i+=1;\n                    j==1;\n                    origin_mutated[i] = 'h';\n                    i+=1;\n                    },\n                '\xd0\xa6' => {\n                    origin_mutated[i] = 'T';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 's';\n                    i+=1;\n                    },\n                '\xd0\xa7' => {\n                    origin_mutated[i] = 'C';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'h';\n                    i+=1;\n                    },\n                '\xd0\xa8' => {\n                    origin_mutated[i] = 'S';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'h';\n                    i+=1;\n                    },\n                '\xd0\xa9' => {\n                    origin_mutated[i] = 'S';\n                    i+=1;\n                    j==1;\n                    origin_mutated[i] = 'h';\n                    i+=1;\n                    origin_mutated[i] = 'c';\n                    i+=1;\n                    origin_mutated[i] = 'h';\n                    i+=1;\n                    },\n                '\xd0\xae' => {\n                    origin_mutated[i] = 'Y';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'u';\n                    i+=1;\n                    },\n                '\xd0\xaf' => {\n                    origin_mutated[i] = 'Y';\n                    i+=1;\n                    j+=1;\n                    origin_mutated[i] = 'a';\n                    i+=1;\n                    },\n                _ => {\n                    j+=1;\n                    }\n                }\n            }\n        }\n    else if j > counter{\n        origin_mutated[i] = '\\n'; \n    }\n    else {\n        origin = origin_mutated.into_iter().collect();\n    }\n    //origin = origin_mutated.into_iter().collect();\n    (origin)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Ami*_*ico 9

错误的原因是这一行没有创建 Vec:

let mut origin_mutated: Vec<char>;
Run Code Online (Sandbox Code Playgroud)

它创建了一个可以保存 Vec 的变量,但目前还没有,甚至不是零长度的变量。就好像说

let a: i32;
Run Code Online (Sandbox Code Playgroud)

它没有价值。你可能的意思是

let mut origin_mutated: Vec<char> = Vec::new();
Run Code Online (Sandbox Code Playgroud)