Яни обнови решението на 25.10.2014 10:25 (преди около 11 години)
Здрасти,
Няколко неща, които забелязвам в кода ти:
- НЕ ползвай
self[ *args]за извикване на анонимна функция.self.call *argsе същото, даже можеш да изпуснешself. Варианта със счупените скоби е този, който най-малко харесваме от трите. - Пробвай без да monkey patch-ваш
Proc. Не е добре да променяш обект, който се ползва буквално на всеки втори ред в Ruby. :) - Защо реши да ползваш mixin? Не може ли вместо
FilterBaseмодула да имплементираш тези методи въвFilterи да оставишTypeFilterиSignFilterда го наследят? Защоcallне е част от mixin-а при положение, че се повтаря и в трите? -
@filter = ->(x){ block.call x }е почти същото като@filter = block. В твоя случай второто ще работи и ще е малко по-кратко/ясно. -
if ! @data.include? new_elementе другия вариант да напишешunless @data.include? new_element. По мое мнение второто е по-четимо. - Провери как работи
Array#each, когато не му подадеш блок. ОчаквамеNumberSet#eachда работи по същия начин.
Също, можеш ли да споделиш какво ти казва skeptic за ->(*args) { self[*args] && other[*args] }, понеже при мен всичко е ok.
Честно казано и на мен ми се искаше да го направя по друг начин с *args но при опит да махна скобите или да го извикам без self ето какви са ми съответните резултати:
С това се сблъсках още докато го писах, но така и неразбрах защо се получава. Единсвено когато е със self и [] работи нормално. Отлкото за другите забележки, много благодаря, че ги отбелязахте - особено как мога да избегна копирането на "call" чрез наследяването(преди проблема беше че при "include" не се наследяваше правилно и при извикването на call в [] даваше грешка).

