簡體   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