Ruby Inte和整数值的评估

时间:2013-11-22 22:21:14

标签: ruby if-statement

我有几次发现自己需要在一些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

似乎必须有一种更优雅的方式来做到这一点。

问题是,ifand并不是很容易用谷歌来研究,作为基本的英语单词。所以我空手而归。

有没有人知道缩短这种情况的方法? 当你有更多的东西时,它可能会变成一场噩梦。

  • 有时变量重命名不是一种选择。
  • 这些名字有时会大不相同。

注意:我找到了一个针对OR类似情况的聪明解决方案:

Ruby Multiple OR Evaluations For String Value

5 个答案:

答案 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