step(s = 1) {|item| ... } -> self
[permalink][rdoc][edit]step(s = 1) -> Enumerator
step(s = 1) -> Enumerator::ArithmeticSequence
self % s -> Enumerator
self % s -> Enumerator::ArithmeticSequence
-
範囲内の要素を s おきに繰り返します。
- [PARAM] s:
- 次のステップへ遷移するたびに加算されるものを指定します。
- [RETURN]
- ブロックを指定した時は self を返します。
- [RETURN]
- ブロックを指定しなかった時かつ数値の Range の時は Enumerator::ArithmeticSequence を返します。
- [RETURN]
- ブロックを指定しなかったその他の Range の時は Enumerator を返します。(例: String の Range)
例
(1..10).step(3) {|v| p v} # => 1 # 4 # 7 # 10 ("a".."f").step(2) {|v| p v} # => "a" # "c" # "e" (10..0).step(-3) {|v| p v} # => 10 # 7 # 4 # 1
非数値の Range では、イテレーションに「要素 + s」を使用します。(文字列またはシンボルの Range で s に数値を指定した場合を除きます)
数値以外の Range に対する例
# Time の Range は each でイテレートできない (Time.utc(2024, 12, 25)...Time.utc(2024, 12, 26)).each { |t| p t } # => 'Range#each': can't iterate from Time (TypeError) # step は使用可能 (Time.utc(2024, 12, 25)...Time.utc(2024, 12, 26)).step(60*60*6) { |t| p t } # => 2024-12-25 00:00:00 UTC # 2024-12-25 06:00:00 UTC # 2024-12-25 12:00:00 UTC # 2024-12-25 18:00:00 UTC ("a"..).step("*").take(3) # => ["a", "a*", "a**"]