Skip to content

Commit 8d3b030

Browse files
authored
Merge pull request #2931 from kyanagi/range_step_plus
Ruby 3.4で`Range#step`が `+` を使用するようになったことに関する修正
2 parents 6f8a762 + 9b97805 commit 8d3b030

File tree

1 file changed

+39
-8
lines changed
  • refm/api/src/_builtin

1 file changed

+39
-8
lines changed

refm/api/src/_builtin/Range

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -523,23 +523,54 @@ Range#each は各要素の succ メソッドを使用してイテレーション
523523

524524
範囲内の要素を s おきに繰り返します。
525525

526-
#@since 2.6.0
526+
#@since 3.4
527+
@param s 次のステップへ遷移するたびに加算されるものを指定します。
528+
#@else
527529
@param s 各ステップの大きさを数値で指定します。負の数を指定することもできます。
530+
#@end
528531
@return ブロックを指定した時は self を返します。
529532
@return ブロックを指定しなかった時かつ数値の Range の時は [[c:Enumerator::ArithmeticSequence]] を返します。
530533
@return ブロックを指定しなかったその他の Range の時は [[c:Enumerator]] を返します。(例: String の Range)
531-
#@else
532-
@param s 正の整数を指定します。
533-
@return ブロックつきの時は self を返します。
534-
@return ブロックなしの時は [[c:Enumerator]] を返します。
535-
@raise ArgumentError s に 0 または負の数を指定した場合に発生します
536-
#@end
537534

538535
#@samplecode 例
539-
("a" .. "f").step(2) {|v| p v}
536+
(1..10).step(3) {|v| p v}
537+
# => 1
538+
# 4
539+
# 7
540+
# 10
541+
542+
("a".."f").step(2) {|v| p v}
540543
# => "a"
541544
# "c"
542545
# "e"
546+
547+
(10..0).step(-3) {|v| p v}
548+
# => 10
549+
# 7
550+
# 4
551+
# 1
552+
#@end
553+
554+
#@since 3.4
555+
556+
非数値の Range では、イテレーションに「要素 + s」を使用します。
557+
(文字列またはシンボルの Range で s に数値を指定した場合を除きます)
558+
559+
#@samplecode 数値以外の Range に対する例
560+
# Time の Range は each でイテレートできない
561+
(Time.utc(2024, 12, 25)...Time.utc(2024, 12, 26)).each { |t| p t }
562+
# => 'Range#each': can't iterate from Time (TypeError)
563+
564+
# step は使用可能
565+
(Time.utc(2024, 12, 25)...Time.utc(2024, 12, 26)).step(60*60*6) { |t| p t }
566+
# => 2024-12-25 00:00:00 UTC
567+
# 2024-12-25 06:00:00 UTC
568+
# 2024-12-25 12:00:00 UTC
569+
# 2024-12-25 18:00:00 UTC
570+
571+
("a"..).step("*").take(3) # => ["a", "a*", "a**"]
572+
#@end
573+
543574
#@end
544575

545576
--- ==(other) -> bool

0 commit comments

Comments
 (0)