繁体   English   中英

Ruby整数值的AND评估

[英]Ruby Multiple AND Evaluations For Integer Value

在某些情况下,我发现自己需要在一些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都不是很容易用Google研究的基本英语单词。 所以我空手而归。

有谁知道一种缩短这种情况的方法? 当您阅读更多书籍时,这可能会成为一场噩梦。

  • 有时,变量重命名不是一种选择。
  • 名称有时会大相径庭。

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

Ruby对字符串值的多重或评估

如果您有一个数组并且专门测试零,则可以执行以下操作:

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

在您的特定情况下,我会写

if [a, b, c, d, e, f].all? { |var| var == 0 }

恕我直言,关于链接and条件存在错误。

您是否考虑过将其分解为逻辑表达式? 基本上将其分解为较小的逻辑分组,并且更易于阅读,例如

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

另一个,对于数组a

a == Array.new(a.size,0)

您可以使用Enumerable#all? Fixnum#zero?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

请注意,您还可以为测试提供任何匿名功能。

 owns_peanuts = ->(person){ person.inventory.contains :peanuts }
 [bill, david, mike].any? &owns_peanuts

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM