Моника качи първо решение на 05.11.2019 14:59 (преди почти 6 години)
Работещо решение, но има как да се опрости кода.
Compiling solution v0.1.0 (/tmp/d20200111-2173579-1lwhuia/solution) warning: unnecessary trailing semicolon --> src/lib.rs:33:39 | 33 | let mut str_sum = sum.to_string();; | ^ help: remove this semicolon | = note: `#[warn(redundant_semicolon)]` on by default warning: variable does not need to be mutable --> src/lib.rs:80:13 | 80 | let mut parsed = (char::to_digit(i,10)).unwrap(); | ----^^^^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default warning: variable does not need to be mutable --> src/lib.rs:101:13 | 101 | let mut parsed = (char::to_digit(i,10)).unwrap(); | ----^^^^^^ | | | help: remove this `mut` warning: unnecessary trailing semicolon --> src/lib.rs:33:39 | 33 | let mut str_sum = sum.to_string();; | ^ help: remove this semicolon | = note: `#[warn(redundant_semicolon)]` on by default warning: variable does not need to be mutable --> src/lib.rs:80:13 | 80 | let mut parsed = (char::to_digit(i,10)).unwrap(); | ----^^^^^^ | | | help: remove this `mut` | = note: `#[warn(unused_mut)]` on by default warning: variable does not need to be mutable --> src/lib.rs:101:13 | 101 | let mut parsed = (char::to_digit(i,10)).unwrap(); | ----^^^^^^ | | | help: remove this `mut` Finished test [unoptimized + debuginfo] target(s) in 1.69s 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
Работещо решение, но има как да се опрости кода.
Тази функция е малко странна. Променлива с име
num
е малко странно да еchar
. Може биdigit
щеше да е по-удачно примерно. Освен това, ако не е във валидния range, връща 0, което е странен failure case. Ако се извика катоhex_to_dec('1')
, ще върне 0, въпреки, че1
е напълно валидна шестнадесетична цифра.Ясно е, че ти просто викаш тази функция с правилния вход, но ако някой колега (или ти самата след седмици/месеци) решиш да я използваш, е много лесно да забравиш, че трябва да се вика само със символите
'a'..'f'
. Функцията просто има неудобен интерфейс, позволява ти лесно да сбъркаш употребата ѝ.Иначе, метода
char::to_digit
вероятно щеше да ти свърши работа.Тези два реда, проверка за това дали е цифра, и конвертиране към цифра, няма нужда да са отделни. Метода
to_digit
вече прави това конвертиране и ти връщаNone
ако не е валидна цифра:Този код е по-кратък и върши по-малко работа (не валидира два пъти).
Името на променливата също е малко misleading --
i
обикновено се използва за числа, или индекс на итерация. Може биc
щеше да е по-удачно.Тук имаш повторно променяне на
str_sum = sum.to_string()
. Не мисля, че е нужно.Не ти трябва
hex_to_dec
, последвано отchar::to_digit(i, 10)
. Можеше просто да извикашchar::to_digit(i, 16)
.