У меня есть очень повторяющееся условное предложение .Мне было интересно, можно ли убрать немного метапрограммирования .
Это упрощенный пример того, с чем я имею дело:
FILTERS = [
:filter1,
:filter2,
:filter3
]
def filter1; true; end
def filter2; true; end
def filter3; true; end
if(
send( FILTERS[0] ) &&
send( FILTERS[1] ) &&
send( FILTERS[2] )
)
puts "DONE!"
end
(Вв моем реальном случае массив FILTERS
содержит 27 элементов)
Цель состоит в том, чтобы заменить три строки в предложении if
какой-то автоматической итерациейчерез все методы фильтрации .
Другим важным соответствием является сохранение быстрого выхода команды &&
: в случае, если filter1
равно false
, ни filter2
, ни filter3
не будут выполнены.
Массив FILTERS
как раз для того, чтобы помочь найти элегантное решение, вам не нужно его использовать.