我正在设计一个库,它将给定的字符串从乌克兰语音译为英语,因此我决定使用“匹配”运算符来定义带有多个条件检查的语句。但我遇到了编译器错误,这对于 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\nRun Code Online (Sandbox Code Playgroud)\n\n这是库的完整代码。如果我没有看到明显的东西,请让我遇到问题(因为我怀疑这可能是编译器中的错误)
\n\npub 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}\nRun Code Online (Sandbox Code Playgroud)\n
错误的原因是这一行没有创建 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)
| 归档时间: |
|
| 查看次数: |
4639 次 |
| 最近记录: |