返回非空选项的最优雅和有效的方式

时间:2017-11-15 18:04:46

标签: ruby-on-rails ruby

根据测试结果,我正在尝试在Rails中选择AB测试选项。我想找一个更有效的方法来做第一个零测试: 如果给定选项A为零,则返回B. 如果给定选项B为零,则返回A

module AbTestHelper
  def ab_test_choice(ab_test_name, option_a, option_b, *args)
      #This part
      return option_b unless option_a
      return option_a unless option_b
      #This part    

      check_test_enabled = "#{ab_test_name}_enabled?"
      test_result = send(check_test_enabled, args) if respond_to? check_test_enabled
      return option_a if result
      option_b 
  end

  private

  def colour_enabled?(user = current_user)
    return unless user.is_a? User
    user.enabled_for?(:colour)
  end
end

1 个答案:

答案 0 :(得分:1)

对我来说似乎没问题,但另一种方法是使用^运算符,如下所示:

...
return option_a or option_b if !!option_a ^ !!option_b
...

^运算符是独占运算符,因此仅当其中一个选项为truenil时才会成立。

这个问题是它比原始版本更少惯用且更难理解。