[英]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
似乎必須有一種更優雅的方法來執行此操作。
問題是, if
和and
都不是很容易用Google研究的基本英語單詞。 所以我空手而歸。
有誰知道一種縮短這種情況的方法? 當您閱讀更多書籍時,這可能會成為一場噩夢。
注意:在OR的類似情況下,我找到了一個聰明的解決方案:
如果您有一個數組並且專門測試零,則可以執行以下操作:
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.