Георги качи първо решение на 05.11.2019 13:27 (преди около 6 години)
Разумно решение, но може да намериш функции в стандартната библиотека, с които да си улесниш живота.
Compiling solution v0.1.0 (/tmp/d20200111-2173579-17clggr/solution)
Finished test [unoptimized + debuginfo] target(s) in 1.79s
Running target/debug/deps/solution-a73e64ec87929bd0
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Running target/debug/deps/solution_test-38971695424b36d5
running 6 tests
test solution_test::test_binary ... ok
test solution_test::test_decimal_basic ... ok
test solution_test::test_hex_basic ... ok
test solution_test::test_invalid ... ok
test solution_test::test_octal_basic ... ok
test solution_test::test_zeroes ... ok
test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Doc-tests solution
running 0 tests
test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Разумно решение, но може да намериш функции в стандартната библиотека, с които да си улесниш живота.
Тази функция е малко странна. Какво става ако подадем символа
0? Ще получим числото0, също както бихме получили това число в случай на невалиден вход. Няма разлика между грешен вход и валидния вход0.Причината да работи е защото правиш валидация преди това. Ако случайно забравиш да валидираш някъде, този код ще е silently wrong, which is the worst kind of wrong :). Доста по-добре за целите на дебъгването е да викнеш
unwrap()тук, за да спреш цялата програма, отколкото да връщаш грешен резултат, но само понякога.(Още по-добре е да използваш това, което функцията ти връща -- вместо да валидираш първо, и после да process-ваш, можеш директно да сложиш една if/match-клауза докато process-ваш и да върнеш
Noneв случай на грешка.)Не е много добро име за функцията --
a_to_fми изглежда като функция, която конвертира от нещо до нещо, зарадиto-то. По-удачно щеше да бъде да я наречешvalid_hexили нещо такова и да вкараш логикатаchar::is_numeric(x)тук.Макар че можеше и да използваш
char::is_digit(16)директно. Или още по-добре,char::to_digit(16), което ако ти върне в какъвто и да е моментNone, да върнеш и тиNoneот функциятаhex.Иначе, ако ти изглежда по-смислено да имаш функция, която проверява само тази логика, по-добро име би било може би
between_a_and_fи съответноbetween_0_and_7.