我有几次发现自己需要在一些ruby脚本中写一个相当冗长的if语句。
该陈述看起来像这样:
if long_var_name == 0 && very_different_name == 0 && other_third_var == 0 && additional_variable == 0 && name_five == 0 && longest_variable_name_six == 0
# (possibly even more conditions)
# do stuff here...
end
似乎必须有一种更优雅的方式来做到这一点。
问题是,if
和and
并不是很容易用谷歌来研究,作为基本的英语单词。所以我空手而归。
有没有人知道缩短这种情况的方法? 当你有更多的东西时,它可能会变成一场噩梦。
注意:我找到了一个针对OR类似情况的聪明解决方案:
答案 0 :(得分:6)
如果你有一个数组并且专门测试零,你可以这样做:
vars1 = [0,0,3,0,0]
vars2 = [0,0,0,0,0]
vars1.all?(&:zero?) # false
vars2.all?(&:zero?) # true
编辑:基于OP增加的条件,即为值赋予不同的名称:
if [long_var_name_1,long_var_name_2,long_var_name_3].all?(&:zero?)
# do stuff here...
end
答案 1 :(得分:1)
在你的具体情况下,我会写
if [a, b, c, d, e, f].all? { |var| var == 0 }
链接and
条件恕我直言。
答案 2 :(得分:1)
你有没有想过把它分解成逻辑表达式?基本上将其分解为较小的逻辑分组并且更容易阅读,例如
grp_1_zero = var_1 == 0 && var_2 == 0 && var_3 == 0
grp_2_zero = var_a == 0 && var_b == 0 && var_c == 0
grp_3_zero = var_z == 0 && var_x == 0 && var_y == 0
if grp_1_zero && grp_2_zero && grp_3_zero
#code here
end
答案 3 :(得分:1)
另一个,对于数组a
:
a == Array.new(a.size,0)
答案 4 :(得分:0)
您可以使用Enumerable#all?
和[{1}}方法的Symbol#to_proc
利用率。
Fixnum#zero?
请注意,您还可以为测试提供任何匿名功能。
foo = 0
bar = 0
baz = 0
[foo, bar, baz].all? &:zero?
# => true
one = 1
two = 2
[foo, one, two].any? &:zero?
#=> true