1. ホーム
  2. ruby

[解決済み] Rubyで「逆レンジ」を繰り返し処理できないのはなぜですか?

2022-08-20 12:55:51

質問

レンジを使用して逆方向の反復処理を行おうとしたところ each :

(4..0).each do |i|
  puts i
end
==> 4..0

イテレーションスルー 0..4 が数字を書き込む。もう一方のRangeでは r = 4..0 は大丈夫なようです。 r.first == 4 , r.last == 0 .

上記の構成が期待される結果をもたらさないのは、私には不思議に思われます。その理由は何でしょうか?この動作が妥当なのはどのような場合でしょうか?

どのように解決するのですか?

範囲とは、その内容ではなく、開始と終了によって定義されるものです。範囲に対する "Iterating" は、一般的なケースでは本当に意味がありません。例えば、2つの日付が作り出す範囲に対してどのように「反復処理」を行うかを考えてみてください。日単位、月単位、年単位、週単位で反復するのでしょうか?定義が不明確なのです。IMOは、それが前方の範囲に対して許可されているという事実は、便利な方法としてのみ見なされるべきです。

そのような範囲に対して後方反復を行いたい場合は、常に downto :

$ r = 10..6
=> 10..6

$ (r.first).downto(r.last).each { |i| puts i }
10
9
8
7
6

以下は もう少し考えてみましょう。 は、反復を許可し、一貫して逆レンジを処理することが困難である理由について、他の人たちからの考えを述べました。