Issue #7580 has been updated by DanielRHeath (Daniel Heath).


On the other hand, `+` could easily be construed to construct non-contiguous ranges (eg `((1..2) + (4..5)).to_a == [1,2,4,5]`.

----------------------------------------
Feature #7580: Range translation
https://bugs.ruby-lang.org/issues/7580#change-72464

* Author: charliesome (Charlie Somerville)
* Status: Assigned
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
----------------------------------------
=begin
I would like to propose the (({#+})) and (({#-})) methods on (({Range})).

These would be useful for translating ranges - for example, given a range where the endpoints are 1-indexed, the range could be translated by 1 in the negative direction to use in (({Array#[]})).

Instead of doing a syntactically-bulky manual translation like so:

  ary[(range.begin - 1)..(range.end - 1)]

(({Range#-})) could be used instead:

  ary[range - 1]

The translation methods would not handle certain endpoint types specially, they would just pass the call on.

Here's an example implementation in Ruby:

  class Range
    def +(other)
      Range.new(self.begin + other, self.end + other, exclude_end?)
    end

    def -(other)
      Range.new(self.begin - other, self.end - other, exclude_end?)
    end
  end

=end



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>