Ruby:有条件句中的元编程

时间:2012-03-07 11:52:11

标签: ruby metaprogramming

我有一个非常重复的条件句。我想知道是否可以通过一些元编程进行清理。

这是我正在处理的一个简化示例:

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数组可以帮助您找到优雅的解决方案,但您不必使用它。

1 个答案:

答案 0 :(得分:7)

FILTERS.all? {|filter| send(filter) } and puts "DONE!"