Цветан обнови решението на 16.10.2016 23:53 (преди около 8 години)
Лично аз не съм много убеден за употребата на списък като ключ, тъй като е mutable обект, а това не е добра практика.Използвах го, защото на мен ми се вижда удачно решение в случая.
................. Finished in 0.00909 seconds 17 examples, 0 failures
Лично аз не съм много убеден за употребата на списък като ключ, тъй като е mutable обект, а това не е добра практика.Използвах го, защото на мен ми се вижда удачно решение в случая.
9 / 5.to_f
може да го замениш с 1.8
. Не е фатално и разбирам, ако си искал да моделираш формулата точно. Иначе самата формула има различни варианти (един от които с 1.8
).
Тук няма нужда да използваш fetch
. По подразбиране предпочитай []
, освен ако не си 100% сигурен, че искаш да получиш грешка за несъществуващ ключ.
А конструкцията hash.fetch(key) if hash.key? key
се държи по абсолютно същия начин, както и hash[key]
. Тоест връща nil
, когато го няма ключа.
Не разбирам смисъла на тази проверка. Всичко ще работи дори да я няма. :) Какво си имал предвид?
@Георги
Исках да се подсигуря че стойността ще е Numeric, тоест ако имаше тест, където вместо Numeric се подава - true/false например, да "гръмне". Но сега като се замисля е малко ненужно.
Виж коментара за []
:) Просто в Ruby света fetch
се използва изключително рядко. В повечето случаи искаш или да го оставиш да гръмне, или да хвърлиш собствена грешка, свързана с domain логиката ти.
Тук е по-добре да подадеш директно символа :melting
.
http://fmi.ruby.bg/tasks/1/solutions/1#comment-216
Това е част от кода и не го използваш никъде другаде. Освен това ще имаш едно преобразуване по-малко.
Даже в този вариант, ако държиш имената на елементите да са символи, бих предпочел да сложа to_sym
тук, вместо в substance_state_temperature
. Логиката за това е, че е добре възможно най-рано да преобразуваш данните от външния свят към данните, които използва програмата ти. Освен това, ако ти се наложи да използваш substance_state_temperature
от друго място, ще имаш избор какво да дадеш.
Здравейте, бихте ли могли да ми дадете коментар към решението? :)
@Цветан, оставих малко коментари inline :)
Относно масива за ключ - това е една от малкото добри употреби на това. Разбира се, може да се избегне като:
Ако си разгледал решенията на другите сигурно си видял и двата варианта. Масивите и стринговете са ми на кантар, но по-скоро бих предпочел твоя вариант с масивите (ако не съм се сетил за втория).
Двата алтернативни варианта са две нива на промени - едното е на ниво алгоритъм, другото е на ниво структуриране на код.
Ако имаш други въпроси - питай!
Супер, благодарско! Оправих кода, но вече не ми дава да качвам решение :(
9 / 5.to_f
може да го замениш с1.8
. Не е фатално и разбирам, ако си искал да моделираш формулата точно. Иначе самата формула има различни варианти (един от които с1.8
).Тук няма нужда да използваш
fetch
. По подразбиране предпочитай[]
, освен ако не си 100% сигурен, че искаш да получиш грешка за несъществуващ ключ.А конструкцията
hash.fetch(key) if hash.key? key
се държи по абсолютно същия начин, както иhash[key]
. Тоест връщаnil
, когато го няма ключа.Не разбирам смисъла на тази проверка. Всичко ще работи дори да я няма. :) Какво си имал предвид?
@Георги
Исках да се подсигуря че стойността ще е Numeric, тоест ако имаше тест, където вместо Numeric се подава - true/false например, да "гръмне". Но сега като се замисля е малко ненужно.
Виж коментара за
[]
:) Просто в Ruby светаfetch
се използва изключително рядко. В повечето случаи искаш или да го оставиш да гръмне, или да хвърлиш собствена грешка, свързана с domain логиката ти.Тук е по-добре да подадеш директно символа
:melting
.http://fmi.ruby.bg/tasks/1/solutions/1#comment-216
Това е част от кода и не го използваш никъде другаде. Освен това ще имаш едно преобразуване по-малко.
Даже в този вариант, ако държиш имената на елементите да са символи, бих предпочел да сложа
to_sym
тук, вместо вsubstance_state_temperature
. Логиката за това е, че е добре възможно най-рано да преобразуваш данните от външния свят към данните, които използва програмата ти. Освен това, ако ти се наложи да използвашsubstance_state_temperature
от друго място, ще имаш избор какво да дадеш.