[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>

13 messages 2000/10/02

[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>

OK, here is what I think I know.

14 messages 2000/10/11

[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>

18 messages 2000/10/11
[#5427] RE: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — OZAWA -Crouton- Sakuro <crouton@...> 2000/10/11

At Thu, 12 Oct 2000 03:49:46 +0900,

[#5429] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...> 2000/10/11

Thanks for the input.

[#5432] Re: Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Yasushi Shoji <yashi@...> 2000/10/11

At Thu, 12 Oct 2000 04:53:41 +0900,

[#5516] Re: Some newbye question — ts <decoux@...>

>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:

80 messages 2000/10/13
[#5531] Re: Some newbye question — matz@... (Yukihiro Matsumoto) 2000/10/14

Hi,

[#5544] Re: Some newbye question — Davide Marchignoli <marchign@...> 2000/10/15

On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:

[#5576] Re: local variables (nested, in-block, parameters, etc.) — Dave Thomas <Dave@...> 2000/10/16

matz@zetabits.com (Yukihiro Matsumoto) writes:

[#5617] Re: local variables (nested, in-block, parameters, etc.) — "Brian F. Feldman" <green@...> 2000/10/16

Dave Thomas <Dave@thomases.com> wrote:

[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>

There has been discussion on this list/group from time to time about

16 messages 2000/10/20
[#5712] Re: Dynamic languages, SWOT ? — Charles Hixson <charleshixsn@...> 2000/10/20

Hugh Sasse Staff Elec Eng wrote:

[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>

Hello fellow rubyists,

21 messages 2000/10/26

[ruby-talk:5690] Re: Array#insert

From: Aleksi Niemel<aleksi.niemela@...>
Date: 2000-10-19 17:02:39 UTC
List: ruby-talk #5690
Gotoken proposed code for Array#insert:
> How about this?
>
>   class Array
>     def insert(pos, *obj)
>       self[pos,0] = obj
>       self
>     end
>   end
> 
>   a = [1,2,3] ; a.insert(1, [4, 5]) ; p a #=> [1, [4, 5], 2, 3]
>   a = [1,2,3] ; a.insert(1,  4, 5 ) ; p a #=> [1, 4, 5, 2, 3]
> 

I like it. So here's a (equivalent?) patch which produces

  a=[1,2,3]; a.insert(1, [4,5]); p a;
  [1, [4, 5], 2, 3]

  a=[1,2,3]; a.insert(1, 4,5); p a;
  [1, 4, 5, 2, 3]

  a=[1,2,3]; a.insert(-1, [4,5]); p a;
  [1, 2, [4, 5], 3]

  a=[1,2,3]; a.insert(4, [4,5]); p a;
  [1, 2, 3, nil, [4, 5]]

  a=[1,2,3]; a.insert(-4, [4,5]); p a;
  -e:1:in `insert': index -4 out of array (IndexError)
          from -e:1

  a=[1,2,3]; a.insert(1); p a;
  -e:1:in `insert': wrong # of arguments (1 when 2 required) (ArgumentError)
          from -e:1

  a=[1,2,3]; a.insert([4,5], 1); p a;
  -e:1:in `insert': Argument position is not a fixnum (ArgumentError)
          from -e:1

Approved?

	- Aleksi

[niemela@mercury ruby]$ cvs diff -u array.c
Index: array.c
===================================================================
RCS file: /home/cvs/ruby/array.c,v
retrieving revision 1.30
diff -u -r1.30 array.c
--- array.c     2000/10/10 07:03:15     1.30
+++ array.c     2000/10/19 16:52:05
@@ -617,6 +617,30 @@
     return argv[1];
 }
 
+static VALUE
+rb_ary_insert(argc, argv, ary)
+    int argc;
+    VALUE *argv;
+    VALUE ary;
+{
+    VALUE objects;
+    long pos;
+
+    if (argc < 2) {
+       rb_raise(rb_eArgError, "wrong # of arguments (%d when 2 required)",
argc);
+    }
+
+    if (TYPE(argv[0]) != T_FIXNUM) {
+      rb_raise(rb_eArgError, "Argument position is not a fixnum");
+    }
+
+    pos = FIX2INT(argv[0]);
+    objects = rb_ary_new4(argc-1, argv+1);
+    rb_ary_replace(ary, pos, 0, objects);
+
+    return ary;
+}
+
 VALUE
 rb_ary_each(ary)
     VALUE ary;
@@ -1615,6 +1639,7 @@
 
     rb_define_method(rb_cArray, "[]", rb_ary_aref, -1);
     rb_define_method(rb_cArray, "[]=", rb_ary_aset, -1);
+    rb_define_method(rb_cArray, "insert", rb_ary_insert, -1);
     rb_define_method(rb_cArray, "at", rb_ary_at, 1);
     rb_define_method(rb_cArray, "first", rb_ary_first, 0);
     rb_define_method(rb_cArray, "last", rb_ary_last, 0);


In This Thread

Prev Next