[#5218] Ruby Book Eng tl, ch1 question — Jon Babcock <jon@...>
From: Jon Babcock <jon@kanji.com>
Thanks.
From: Jon Babcock <jon@kanji.com>
Ah, thanks, I think I get it, a slightly different nuance then.
From: Jon Babcock <jon@kanji.com>
'Because all of Ruby has been...' -> 'Because Ruby has been...'?
[#5221] better way to say 'recursive join' — Yasushi Shoji <yashi@...>
in [ruby-dev:6289], Shugo Maeda suggested better name for recursive
[#5240] Ruby for Win32/DOS — Dennis Newbold <dennisn@...>
Not all of us are blessed with the opportunity to be able to develop on
[#5254] problem: undefined method `size' for File — "葡ic Santonacci" <Eric.Santonacci@...>
Hi all,
HI,
[#5264] Re: problem: undefined method `size' for Fil e — Aleksi Niemel<aleksi.niemela@...>
matz critizes good solution argumenting with features lacking from some
[#5268] Proper ConditionVariable usage? — Aleksi Niemel<aleksi.niemela@...>
Abstract
On Wed, 04 Oct 2000 07:05:22 +0900, Aleksi Niemelwrote:
In message <20001004110040.A26666@xs4all.nl>
Hi,
[#5276] Re: Ruby Book Eng tl, ch1 question — schneik@...
[#5310] Errata for Ruby Book? — Jon Babcock <jon@...>
[#5318] Redefining super method as singleton? — Robert Feldt <feldt@...>
On Fri, 6 Oct 2000, Yukihiro Matsumoto wrote:
[#5329] Ruby vs PHP ? — "Valerio Bamberga" <bamberga@...>
Hi!
[#5331] Unit testing network code? — Hugh Sasse Staff Elec Eng <hgs@...>
Can someone give me pointers on how to Unit Test code that is run on
> I think maybe one would test each end on its own first, faking the
[#5335] string streams in Ruby? — Hugh Sasse Staff Elec Eng <hgs@...>
Is there any way, without going through "modifying the internals",
[#5346] Is Ruby "enough better"? — Gabriel Lima <Gabriel.Lima@...>
Hi.
[#5364] Allowing *ary's in the middle of a camma separated list — "Akinori MUSHA" <knu@...>
Hi,
Hi,
At Tue, 10 Oct 2000 14:17:24 +0900,
[#5404] Object.foo, setters and so on — "Hal E. Fulton" <hal9000@...>
OK, here is what I think I know.
At Wed, 11 Oct 2000 11:37:25 +0900,
Hi,
Hi,
Hi,
Hi,
[#5425] Ruby Book Eng. tl, 9.8.11 -- seishitsu ? — Jon Babcock <jon@...>
At Thu, 12 Oct 2000 03:49:46 +0900,
Thanks for the input.
At Thu, 12 Oct 2000 04:53:41 +0900,
At Thu, 12 Oct 2000 07:25:03 +0900,
oops, I didn't read this one before I went out for food..
At Thu, 12 Oct 2000 09:59:19 +0900,
[#5437] Editor recommandations? — "Chris Morris" <chrismo@...>
Any recommendations on editors for Ruby script on Windows?
[#5471] 2 ideas from Haskell — Mark Slagell <ms@...>
Do either of these interest anyone:
[#5479] Some newbye question — Davide Marchignoli <marchign@...>
I am reading the documentation I found about ruby but several points
[#5480] InstallShield version for Ruby soon... — andy@... (Andrew Hunt)
Okay folks,
[#5489] Regexp#matches — Aleksi Niemel<aleksi.niemela@...>
Would someone object aliasing matches for match in Regexp?
[#5505] Sorry, What is Ruby Book — Mansuriatus Shahrir Amir <chioque@...>
Sorry if this information is somewhere obvious. I just stumbled upon
[#5516] Re: Some newbye question — ts <decoux@...>
>>>>> "D" == Davide Marchignoli <marchign@di.unipi.it> writes:
Hi,
On Sat, 14 Oct 2000, Yukihiro Matsumoto wrote:
matz@zetabits.com (Yukihiro Matsumoto) writes:
Dave Thomas <Dave@thomases.com> wrote:
Hi,
> Proposal a and b have incompatibility. I'm not sure it's worth it.
>>>>> "Y" == Yukihiro Matsumoto <matz@zetabits.com> writes:
On Mon, 16 Oct 2000, ts wrote:
>>>>> "Y" == Yukihiro Matsumoto <matz@zetabits.com> writes:
[#5558] GC: malloc_memories — Mathieu Bouchard <matju@...>
Hi,
> |precipitate a new GC cycle if lots of resizing is done. My biggest
[#5570] Notes about GC — Mathieu Bouchard <matju@...>
[#5600] passing single or multiple strings. — Hugh Sasse Staff Elec Eng <hgs@...>
With multple assignments I can get nested arrays "shelled" (like peas)
In message "[ruby-talk:5600] passing single or multiple strings."
[#5603] debug command list in English — "Morris, Chris" <ChrisM@...>
I found this page which lists the interactive debugger commands ... anyone
[#5619] lint? — "Swit" <swit@...>
Is there something like lint for Ruby? I'd like to find NameErrors before
[#5705] Dynamic languages, SWOT ? — Hugh Sasse Staff Elec Eng <hgs@...>
There has been discussion on this list/group from time to time about
Hugh Sasse Staff Elec Eng wrote:
On Sat, 21 Oct 2000, Charles Hixson wrote:
[#5715] Help: sockets broken — jason petrone <jp@...>
I just compiled ruby 1.6.1 on an openbsd 2.6 machine(x86).
[#5716] Re: Array#insert — Aleksi Niemel<aleksi.niemela@...>
> From: jweirich@one.net [mailto:jweirich@one.net]
[#5727] String#slice surprise — "Guy N. Hurst" <gnhurst@...>
Hi,
Dave Thomas wrote:
[#5787] Shells and Ruby — "Dat Nguyen" <thucdat@...>
Hello all,
[#5850] Re: Array#insert rehashed — Aleksi Niemel<aleksi.niemela@...>
Dave asks for:
[#5862] succ but no pred? (& the MURKY award) — "Hal E. Fulton" <hal9000@...>
First of all, a serious question:
[#5873] Integer(String) weirdness for a ruby newbie — Stoned Elipot <Stoned.Elipot@...>
Hi,
[#5881] Q:what about "Programming Ruby"? — Gabriel Lima <Gabriel.Lima@...>
Hi to you all.
[#5882] [RFC] Towards a new synchronisation primitive — hipster <hipster@...4all.nl>
Hello fellow rubyists,
On Fri, 27 Oct 2000, hipster wrote:
[#5947] Hash.new {block} / Hash#default_proc{,_set} — "Brian F. Feldman" <green@...>
I've done very little testing, but I think I've successfully implemented the
[ruby-talk:5716] Re: Array#insert
> From: jweirich@one.net [mailto:jweirich@one.net]
> >>>>> "Mark" == Mark Slagell <ms@iastate.edu> writes:
>
> >> I would prefer that using -1 would result in:
> >>
> >> [1, 2, 3, [4, 5]]
>
> Mark> But it muddies the semantics, right? "insert before" for
> Mark> non-negative indices, "insert after" for negative.
>
> Don't think of it as "insert before" or "insert after". Think of it
> as "insert at".
Very good discussion. Guy's right about better semantics, Mark about real
meaning of semantics, and Jim about proposing the way to understand how
negative indexes work.
While Jim's following discussion
> After ...
> a.insert (index, value)
> then ...
> a[index] == value
>
applies when value is just one parameter, it has to be extended when
Array#insert is called with multiple values. The idea is the same anyway:
After ...
a.insert (index, val1, val2, val3)
then
a[index] == val1
a[index+1] == val2
a[index+2] == val3
> BTW, shouldn't the method be named "insert!" ?
I think I'm following matz ideas when I named it to be "insert" instead of
"insert!". And the reasoning is that currently the methods are not named
with exclamation mark (!) if
1) the name clearly indicates the receiving object is going to change and/or
2) there's no corresponding method with implicit dup.
In this case the name indicates the receiver is going to be changed, and
there's no !-version (just like Array#delete_at doesn't have exclamation
mark).
My understanding is that a method which changes receiver can be named
without !. But a method which does not change receiver can't be named with
!.
Also a method which has a non-receiver-mutating version too has to be named
with !.
I'm sure matz will correct me here, if I'm mistaken or the "rules" are
incorrect. I'm also willing to create insert *and* insert! if it's thought
to be necessary or the current way confusing. I don't feel so (yet :).
Maybe the name should Array#insert_at, like delete_at. What do you think?
Anyway, here's an update patch, which passes the following RubyUnit tests:
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/20 18:54:38
@@ -617,6 +617,42 @@
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");
+ }
+
+ objects = rb_ary_new4(argc-1, argv+1);
+
+ pos = FIX2INT(argv[0]);
+ /* tweak negative positions to insert in correct place so that
+ following array is indexed properly
+
+ [12, 34, 45, 56]
+ 0 1 2 3 positive indexes
+ -4 -3 -2 -1 negative indexes
+ */
+ if (pos < 0)
+ if (++pos == 0)
+ pos = RARRAY(ary)->len;
+
+ rb_ary_replace(ary, pos, 0, objects);
+
+ return ary;
+}
+
VALUE
rb_ary_each(ary)
VALUE ary;
@@ -1615,6 +1651,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);
def test_insert
# Jim Weirich describes a way to understand
# insert's semantics at [ruby-talk:5700]
a = [1,2,3]
assert_equal([[4, 5], 1, 2, 3], a.dup.insert(0, [4,5]) )
assert_equal([1, [4, 5], 2, 3], a.dup.insert(1, [4,5]) )
assert_equal([1, 2, [4, 5], 3], a.dup.insert(2, [4,5]) )
assert_equal([1, 2, 3, [4, 5]], a.dup.insert(3, [4,5]) )
assert_equal([1, 2, 3, nil, [4, 5]], a.dup.insert(4, [4,5]) )
assert_equal([1, 4, 5, 2, 3], a.dup.insert(1, 4, 5) )
assert_equal([1, 2, 3, [4, 5]], a.dup.insert(-1, [4,5]) )
assert_equal([1, 2, [4, 5], 3], a.dup.insert(-2, [4,5]) )
assert_equal([1, [4, 5], 2, 3], a.dup.insert(-3, [4,5]) )
assert_equal([[4, 5], 1, 2, 3], a.dup.insert(-4, [4,5]) )
# I'm a little bit unsure if this should be an error
assert_exception(IndexError) { a.dup.insert(-5, [4,5]) }
assert_exception(ArgumentError) { a.dup.insert(1) }
assert_exception(ArgumentError) { a.dup.insert([4,5], 1) }
# Jim Weirich test extended
b = a.dup
b.insert(1, 6)
assert_equal([1, 6, 2, 3], b)
b.insert(1, 5)
assert_equal([1, 5, 6, 2, 3], b)
b.insert(1, 4)
assert_equal([1, 4, 5, 6, 2, 3], b)
assert_equal(b, a.dup.insert(1, 4, 5, 6))
b = a.dup.insert(1, 4, 5, 6)
assert_equal(4, b[1] )
assert_equal(5, b[1+1])
assert_equal(6, b[1+2])
end