[#50466] [ruby-trunk - Bug #7492][Open] Segmentation fault at DL::TestDL#test_call_double on x64 Windows 8 — "phasis68 (Heesob Park)" <phasis@...>

23 messages 2012/12/02

[#50558] [ruby-trunk - Feature #7511][Open] short-circuiting logical implication operator — "rits (First Last)" <redmine@...>

12 messages 2012/12/04

[#50575] [ruby-trunk - Feature #7517][Open] Fixnum::MIN,MAX — "matz (Yukihiro Matsumoto)" <matz@...>

20 messages 2012/12/05

[#50755] Becoming a committer — Charlie Somerville <charlie@...>

Hi ruby-core,

21 messages 2012/12/11
[#50759] Re: Becoming a committer — Yukihiro Matsumoto <matz@...> 2012/12/11

Hi,

[#50784] Re: Becoming a committer — Charles Oliver Nutter <headius@...> 2012/12/11

It's really this easy? If so, I'll send over my public key today :)

[#50795] Re: Becoming a committer — Yukihiro Matsumoto <matz@...> 2012/12/11

Hi,

[#50806] [ruby-trunk - Feature #7548][Open] Load and Require Callbacks — "trans (Thomas Sawyer)" <transfire@...>

12 messages 2012/12/12

[#50810] [ruby-trunk - Feature #7549][Open] A Ruby Design Process — "brixen (Brian Ford)" <brixen@...>

34 messages 2012/12/12

[#50867] [ruby-trunk - Bug #7556][Assigned] test error on refinement — "usa (Usaku NAKAMURA)" <usa@...>

14 messages 2012/12/13

[#50900] [ruby-trunk - Bug #7564][Open] r38175 introduces incompatibility — "tenderlovemaking (Aaron Patterson)" <aaron@...>

14 messages 2012/12/14

[#50951] [ruby-trunk - Bug #7584][Open] Ruby hangs when shutting down an ssl connection in gc finalization — "bpot (Bob Potter)" <bobby.potter@...>

12 messages 2012/12/17

[#51076] [ruby-trunk - Feature #7604][Open] Make === comparison operator ability to delegate comparison to an argument — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

12 messages 2012/12/22

[ruby-core:50771] [ruby-trunk - Feature #7546][Open] Change behavior of `Array#slice` for an argument of `Range` class

From: "alexeymuranov (Alexey Muranov)" <redmine@...>
Date: 2012-12-11 16:23:23 UTC
List: ruby-core #50771
Issue #7546 has been reported by alexeymuranov (Alexey Muranov).

----------------------------------------
Feature #7546: Change behavior of `Array#slice` for an argument of `Range` class
https://bugs.ruby-lang.org/issues/7546

Author: alexeymuranov (Alexey Muranov)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 


=begin
This is a concrete proposal to "fix" #4541.

It is also related to #7545.
For this proposal to make good sense, i think it would be nice if #7545 was at least partially accepted.

=== Main proposal

I propose (({Array#slice})) with (({Range})) type argument to work as follows:

  a = ['0', '1', '2', '3']
  a[1..2]   # => ['1', '2']
  a[-2..-1] # => ['2', '3']
  a[2..1]   # => ['2', '1']
  a[-1..-2] # => ['3', '2']
  a[-1..1]  # => ['3', '0', '1']
  a[1..-1]  # => ['1', '0', '3']
  a[1..1]   # => ['1']
  a[1...1]  # => []
  a[4..4]   # => [nil]
  a[4...4]  # => []
  a[9..9]   # => [nil]
  a[9...9]  # => []
  a[1..5]   # => ['1', '2', '3', nil, nil]

=== Secondary proposal: consider adding new instance methods to (({Array})) to compensate the changed behavior of (({Array#slice}))

If this proposal is accepted, the code "(({a[1..-2]}))" for an array (({a})) will not work as before.
This can be compensated by adding new instance methods to (({Array})).
For example the following ones.

1. (({Array#clip(fixnum, fixnum)})):

  ['0', '1', '2', '3'].clip(1, 1) # => ['1', '2']

Thus (({a.clip(1, 1)})) would be a replacement for (({a[1..-2]})).

(It looks strange to have to convert a pair of numbers ((*m*)) and ((*n*)) into a range (({m..(-1-n)})) to simply ask an array to remove ((*m*)) elements from the beginning and ((*n*)) elements from the end.
If #7545 is accepted, then the "(({a[1..-2]}))" syntax for "clipping" an array will make not much sense and maybe will not be possible.)

2. (({Array#from(fixnum)})), (({Array#till(fixnum)})):

  a = ['0', '1', '2', '3']
  a.from(1)          # => ['1', '2', '3']
  a.till(1)          # => ['0', '1']
  a.from(1).till(-2) # => ['1', '2']

In fact, in ((*Rails*)) (({ActiveSupport})) there are methods (({Array#from})) and (({Array#to})) like this, but unfortunately they do not accept negative indices.

((*Remark*)).  It would also be possible to have (({Array#clip!})), (({Array#from!})), (({Array#till!})).
=end



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

In This Thread

Prev Next