如何动态地将Ruby条件与&&?

时间:2018-02-16 20:26:04

标签: ruby

有没有办法动态地与&&运算符连接条件?

我有这个:

def condition(name)
  if Profile.reflect_on_association(name)
    send(name).present? && send(name).persisted?
  else
    send(name).present?
  end
end

我尝试在数组中构建条件,然后将它们与&&连接起来,但当然不起作用。

感谢您的任何指示。

2 个答案:

答案 0 :(得分:2)

好吧,如果你称之为"条件"是一个值或函数的数组,导致truthy / fasly值,你可以直接用所有值来评估它们:?

conditions_1 = [1, 2, nil]
conditions_1.all? # => false

conditions_2 = [1, true, "lala"]
conditions_2.all? # => true

'所有'评估数组中的所有项是否都符合条件 - 如果没有参数,它将只评估它们是否都是真的。虽然不完全是你要求的,但它应该导致相同的结果。

答案 1 :(得分:2)

我对原始问题的措辞有点不清楚 - 您是否正在寻找一种方法来合并send(name).present? && send(name).persisted?

一个选项是:%i[present? persisted?].all? { |condition| send(name).send(condition) }

虽然如果你只有一些枚举条件,我认为元编程对于可读性来说更糟糕,你在原始问题中编写的代码可能更好。