From: "zverok (Victor Shepelev) via ruby-core" Date: 2024-07-14T11:33:33+00:00 Subject: [ruby-core:118590] [Ruby master Feature#17279] Allow a negative step in Range#step with a block Issue #17279 has been updated by zverok (Victor Shepelev). FWIW, my PR with adjusting `Range#step` behavior fixes this, too: https://github.com/ruby/ruby/pull/7444 (as part of the unificatioin/simplification process): >From the PR description: > Consistent support for negative step: ```ruby p (1..-10).step(-3).to_a #=> [1, -2, -5, -8] -- ArithmeticSequence backward iteration, on Ruby 3.3 and my code (1..-10).step(-3) { p _1 } # Ruby 3.3: step can't be negative (ArgumentError) -- inconsistent with ArithmeticSequence behavior # my code: prints 1, -2, -5, -8, consistent with ArithmeticSequence ``` ---------------------------------------- Feature #17279: Allow a negative step in Range#step with a block https://bugs.ruby-lang.org/issues/17279#change-109117 * Author: mrkn (Kenta Murata) * Status: Assigned * Assignee: matz (Yukihiro Matsumoto) ---------------------------------------- `Range#step` prohibits a negative step when a block is given. ``` >> (6..3).step(-1) {|i| p i } Traceback (most recent call last): 5: from /home/mrkn/.rbenv/versions/2.7/bin/irb:23:in `
' 4: from /home/mrkn/.rbenv/versions/2.7/bin/irb:23:in `load' 3: from /home/mrkn/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/irb-1.2.4/exe/irb:11:in `' 2: from (irb):1 1: from (irb):1:in `step' ArgumentError (step can't be negative) ``` But `Range#step` allows a negative step when it is called without a block. In this case, `Range#step` creates an ArithmeticSequence, and `ArithmeticSequence#each` can iterate with a negative step. ``` >> (6..3).step(-1).each {|i| p i } 6 5 4 3 => ((6..3).step(-1)) ``` I think the prohibition of a negative step in `Range#step` has already been meaningless, so it may be better to permit it for consistency. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/