【发布时间】:2017-11-16 03:43:21
【问题描述】:
我正在尝试根据测试结果在 Rails 中选择 AB 测试选项。我想找到一种更有效的方法来进行第一次 nil 测试: 如果给定选项 A 为 nil,则返回 B 如果给定选项 B 为 nil,则返回 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
【问题讨论】:
-
您的工作方式到底有哪些不雅和/或低效的地方?你如何定义“最优雅、最高效”?
-
虽然这可行,但对我来说似乎有点低效,我必须对两个选项进行相同类型的检查。我想要一种更有效的方法来消除 nil 选项。我这里有 2 个,但如果我有更多,那将是一个一个测试的问题。
-
对我来说似乎很好。如果我是你,我会继续前进。顺便说一句,你似乎从未设置过
result(你似乎设置了test_result),所以return option_a if result永远不会返回option_a,你将永远返回option_b。除非我错过了什么…… -
工作代码在这里有点离题。这个问题可能更适合Code Review。
-
为了在您的测试中更准确,我将使用
return option_b if option_a.nil? andreturn option_a if option_b.nil?` 明确检查nil。有一些非零值是错误的。
标签: ruby-on-rails ruby