我有一个非常重复的条件句。我想知道是否可以通过一些元编程进行清理。
这是我正在处理的一个简化示例:
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
或{ {1}}将被执行。
FILTERS
数组可以帮助您找到优雅的解决方案,但您不必使用它。
答案 0 :(得分:7)
FILTERS.all? {|filter| send(filter) } and puts "DONE!"