Цветан обнови решението на 16.10.2016 23:53 (преди около 9 години)
Лично аз не съм много убеден за употребата на списък като ключ, тъй като е 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от друго място, ще имаш избор какво да дадеш.