如果我有多個||邏輯運算符我想在Ruby中鏈,有沒有更好的方式來寫它比這Ruby ||運算符快捷鍵
if (((a == 1 || a == 9) || a % 5 == 0) || ...)
這完全是非常重複和不潔淨的。
如果我有多個||邏輯運算符我想在Ruby中鏈,有沒有更好的方式來寫它比這Ruby ||運算符快捷鍵
if (((a == 1 || a == 9) || a % 5 == 0) || ...)
這完全是非常重複和不潔淨的。
如果你已經是手術室,你不需要括號...
(a == 1 || a == 9 || a % 5 == 0)
清理了一點東西。
Ruby是一個有趣的語言。可能有許多聰明的方式可以用不那麼重複的方式表達同樣的意圖。我只是謹慎地避免簡潔而非簡單。如果你真的只是尋找一個列表中匹配
的include?
是適當的。但是,如果這不是最適合表達它的方式,則不要保存幾個字符。
什麼是整個語句?如果你正在尋找各種方法來壓縮數學比較弄成短(如
puts 'hi' if a & ~8 == 1 || a % 5 == 0
:
如果有條件的身體是一個單獨的語句,例如,你不需要任何括號&〜8 == 1,這與a == 1 || a == 9相同)然後發佈整個事情。有些人喜歡這樣的事情。 :)
你可以把你的布爾語句到一個數組中,並調用#任何?對此:
if [a == 1, a == 9, a % 5 == 0, ...].any?
這看起來可讀性更強一點,但這肯定取決於您的用例。
如果你有很多的||
的,
讓
t = [" == 1", " == 9", "%5==0"] or
t = %w[==1 ==9 %5==0] # No spaces other than separators! or
t = "==1 ==9 %5==0".split # Ditto! or
t = "== 1, == 9, %5==0".split(',')
然後
t.inject (false) {|r, s| r || eval('a'+s) }
如果你有很多很多的||
的,你可以做這樣的事情之前inject
ING:
assignments = [1, 2, 5, ":cat", "dog",...]
other = "%5==0, & 8,...".split(',')
t = assignments.map {|e| "=="+e.to_s} + other
我不介意downvotes,但我討厭給予沒有解釋的downvotes!我想知道爲什麼,所以我可以改善。哎呀。 –
你在說多少? 10? 100? – Larsenal
您也可以將其重構爲語義有意義的可測試方法。 –
'[1,9] .include?一個'可以代替前兩個'||'表達式。還有'case'語句可以讓你多行傳播的東西,等 –