From 2a4f58f7f22ea6c022f3d8b06eb7292f6b5d46d6 Mon Sep 17 00:00:00 2001 From: Kouhei Yanagita Date: Thu, 28 Dec 2023 16:45:08 +0900 Subject: [PATCH] =?UTF-8?q?Range#reverse=5Feach=E3=81=AE=E8=A8=98=E8=BF=B0?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ruby 3.3からRange#reverse_eachの実装が追加されたため、記述を追加。 Enumrable#reverse_eachのサンプルコードはRangeからHashに変更。 --- refm/api/src/_builtin/Enumerable | 10 +++++----- refm/api/src/_builtin/Range | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/refm/api/src/_builtin/Enumerable b/refm/api/src/_builtin/Enumerable index 6ed8837c85..27dd1dcc7a 100644 --- a/refm/api/src/_builtin/Enumerable +++ b/refm/api/src/_builtin/Enumerable @@ -1112,11 +1112,11 @@ e.take_while {|i| i < 3 } # => [1, 2] [[c:Enumerator]] を返します。 #@samplecode 例 -(1..3).reverse_each # => # -(1..3).reverse_each { |v| p v } -# => 3 -# 2 -# 1 +{a: 1, b: 2, c: 3}.reverse_each # => # +{a: 1, b: 2, c: 3}.reverse_each { |v| p v } +# => [:c, 3] +# [:b, 2] +# [:a, 1] #@end --- each_with_object(obj) -> Enumerator diff --git a/refm/api/src/_builtin/Range b/refm/api/src/_builtin/Range index 35a1d9630f..9a4605930c 100644 --- a/refm/api/src/_builtin/Range +++ b/refm/api/src/_builtin/Range @@ -387,6 +387,30 @@ Range#each は各要素の succ メソッドを使用してイテレーション # raises: TypeError: can't iterate from Float #@end +#@since 3.3 +--- reverse_each -> Enumerator +--- reverse_each {|element| ... } -> self + +逆順に各要素に対してブロックを評価します。 + +内部で各要素を保持した配列を作ります。ただし、端点が [[c:Integer]] である場合は、配列を作らないように最適化が行われています。 + +ブロックを省略した場合は、各要素を逆順に辿る +[[c:Enumerator]] を返します。 + +@raise TypeError 終端を持たない範囲オブジェクトに対してこのメソッドを呼んだ場合に発生します。 + +#@samplecode 例 +(1..3).reverse_each # => # +(1..3).reverse_each { |v| p v } +# => 3 +# 2 +# 1 +(1..).reverse_each { |v| p v } # raises: TypeError: can't iterate from NilClass +#@end + +#@end + --- end -> object --- last -> object