每
Ruby 有許多型別的列舉器,但第一個也是最簡單的列舉器型別是 each。我們將為 1 和 10 之間的每個數字列印出 even 或 odd,以顯示 each 的工作原理。
基本上有兩種方法可以通過所謂的 blocks。block 是傳遞的一段程式碼,它將被呼叫的方法執行。each 方法接受一個 block,它呼叫它所呼叫的物件集合的每個元素。
將塊傳遞給方法有兩種方法:
方法 1:內聯
(1..10).each { |i| puts i.even? ? 'even' : 'odd' }
這是一種非常壓縮和紅寶石的方法來解決這個問題。讓我們一塊一塊地打破這個。
-
(1..10)的範圍從1到10(含)。如果我們想要它是1到10獨家,我們會寫(1...10)。 -
.each是一個列舉器,它列舉了它所作用的物件中的each元素。在這種情況下,它作用於範圍內的each數。 -
{ |i| puts i.even? ? 'even' : 'odd' }是each語句的塊,它本身可以進一步細分。|i|這意味著範圍中的每個元素都由識別符號i表示在塊中。puts是 Ruby 中的一種輸出方法,每次列印後都會自動換行。 (如果我們不想要自動換行,我們可以使用print)i.even?檢查i是否是偶數。我們本來可以用i % 2 == 0; 但是,最好使用內建方法。? "even" : "odd"這是 ruby 的三元運算子。三元運算子的構建方式是expression ? a : b。這是短暫的
if expression a else b end
對於長度超過一行的程式碼,block 應作為 multiline block 傳遞。
方法 2:多行
(1..10).each do |i|
if i.even?
puts 'even'
else
puts 'odd'
end
end
在 multiline block 中,do 取代了開口支架,end 取代了 inline 風格的閉合支架。
Ruby 也支援 reverse_each。它會向後迭代陣列。
@arr = [1,2,3,4]
puts @arr.inspect # output is [1,2,3,4]
print "Reversed array elements["
@arr.reverse_each do |val|
print " #{val} " # output is 4 3 2 1
end
print "]\n"