Биляна качи първо решение на 06.12.2017 22:08 (преди почти 8 години)
Виж какво Andrew написа във форума...
Compiling solution v0.1.0 (file:///tmp/d20171210-6053-15d17rp/solution) Finished dev [unoptimized + debuginfo] target(s) in 6.21 secs Running target/debug/deps/solution-3f98bfa5c86a5dd9 running 1 test test tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out Running target/debug/deps/solution_test-3d9e4ea2eafbbc82 running 15 tests test solution_test::test_command_parsing_cyrillic ... FAILED test solution_test::test_command_parsing_extra_stuff ... ok test solution_test::test_command_parsing_full_words ... ok test solution_test::test_command_parsing_partial_words ... ok test solution_test::test_command_parsing_spacing ... ok test solution_test::test_command_parsing_special ... FAILED test solution_test::test_game_basic ... ok test solution_test::test_game_cyrillic ... ok test solution_test::test_game_display ... ok test solution_test::test_game_error ... FAILED test solution_test::test_game_guess_basic ... ok test solution_test::test_game_guess_state_lose ... ok test solution_test::test_game_guess_state_won ... ok test solution_test::test_game_guess_word ... ok test solution_test::test_game_over_guesses ... ok failures: ---- solution_test::test_command_parsing_cyrillic stdout ---- thread 'solution_test::test_command_parsing_cyrillic' panicked at 'Expected Ok(Command::TryLetter('\u{44f}')) to match Err(ParseError("try letter я"))', tests/solution_test.rs:235:4 note: Run with `RUST_BACKTRACE=1` for a backtrace. ---- solution_test::test_command_parsing_special stdout ---- thread 'solution_test::test_command_parsing_special' panicked at 'Expected Ok(Command::TryLetter('\u{44f}')) to match Err(ParseError("try letter я"))', tests/solution_test.rs:194:4 ---- solution_test::test_game_error stdout ---- thread 'solution_test::test_game_error' panicked at 'Expected Some(GameError::InvalidSolution(_)) to match None', tests/solution_test.rs:38:4 failures: solution_test::test_command_parsing_cyrillic solution_test::test_command_parsing_special solution_test::test_game_error test result: FAILED. 12 passed; 3 failed; 0 ignored; 0 measured; 0 filtered out error: test failed, to rerun pass '--test solution_test'
Виж какво Andrew написа във форума...
Метода
len
брои байтове, а не char-ове: https://doc.rust-lang.org/std/primitive.str.html#method.len. Това значи, че буква на кирилица би имала дължина 2.Освен това, едно подобрение на този код би било да lowercase-неш командите предварително -- така не би ти се налагало да проверяваш ръчно за малки и главни букви (което би могла лесно да сбъркаш в един момент).
Хм, мисля, че тук ти е другата грешка. Забележи, че в цикъла не мутираш променливата
flag
. Не си написалаflag = false
, аflag == false
. Още повече, че не мисля, че дори ти трябва този флаг -- ако намериш символ, който не е азбучен, директно можеш даreturn
-неш грешката. Не би трябвало и да ти трябва тозиclone
, понеже итерираш през символите през итератора, който ти връща.chars()
, не консумираш низа.Пробвай да опростиш този код, мисля, че ще стане доста по-четим.