[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Bug or bad documentation for Array.insert

Markus Echterhoff

8/9/2007 4:35:00 PM

I just came across ruby and noticed a difference between the behavior of
Array.insert() and its documentation.

Method: http://www.ruby-doc.org/core/classes/Array.src/M0...

From the RDoc it seems that two arguments are mandatory, yet Array.insert()
only raises an error if there is no argument passed at all.

Code snippet from Array.insert():

if (argc == 1) return ary;
if (argc < 1) {
rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
}

From my semantic understanding of an "insert" Method it should raise an error
if called with less than two arguments, for silently returning the array can
be irritating for beginners (Took me some time to figure it out).

best regards,
Markus Echterhoff

3 Answers

Daniel Berger

8/9/2007 5:55:00 PM

0



On Aug 9, 10:35 am, Markus Echterhoff <T...@edu.uni-klu.ac.at> wrote:
> I just came across ruby and noticed a difference between the behavior of
> Array.insert() and its documentation.
>
> Method:http://www.ruby-doc.org/core/classes/Array.src/M0...
>
> From the RDoc it seems that two arguments are mandatory, yet Array.insert()
> only raises an error if there is no argument passed at all.
>
> Code snippet from Array.insert():
>
> if (argc == 1) return ary;
> if (argc < 1) {
> rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
> }
>
> From my semantic understanding of an "insert" Method it should raise an error
> if called with less than two arguments, for silently returning the array can
> be irritating for beginners (Took me some time to figure it out).

Nope, the docs show that the second argument is optional. As it stands
now there are a few methods like this scattered throughout Ruby where
you can end up with what amounts to a no-op in certain situations,
e.g. File.join with no arguments.

Not that I necessarily agree with the current semantics, but it is
documented properly. It does require that you understand "obj..." to
mean "0 or more".

Regards,

Dan


Florian Frank

8/9/2007 7:16:00 PM

0

Markus Echterhoff wrote:
> I just came across ruby and noticed a difference between the behavior of
> Array.insert() and its documentation.
>
> Method: http://www.ruby-doc.org/core/classes/Array.src/M0...
>
> From the RDoc it seems that two arguments are mandatory, yet Array.insert()
> only raises an error if there is no argument passed at all.
>
> Code snippet from Array.insert():
>
> if (argc == 1) return ary;
> if (argc < 1) {
> rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
> }
>
> From my semantic understanding of an "insert" Method it should raise an error
> if called with less than two arguments, for silently returning the array can
> be irritating for beginners (Took me some time to figure it out).
>
I think the semantics are just fine. Consider this case:

b = [] # maybe a result from some other method
a.insert 23, *b

I wouldn't want an exception thrown here. It would make it necessary to
check for b's emptiness before every call to Array#insert. If people
forget the check, it might cause an error when the impossible occurs anyway.

--
Florian Frank


Markus Echterhoff

8/12/2007 12:00:00 PM

0

On Thursday 09 August 2007 19:55:23 Daniel Berger wrote:
> Nope, the docs show that the second argument is optional. As it stands
> now there are a few methods like this scattered throughout Ruby where
> you can end up with what amounts to a no-op in certain situations,
> e.g. File.join with no arguments.
>
> Not that I necessarily agree with the current semantics, but it is
> documented properly. It does require that you understand "obj..." to
> mean "0 or more".
>
> Regards,
>
> Dan

Thanks, when I read the "obj..." as you say it's clear.


On Thursday 09 August 2007 21:15:43 Florian Frank wrote:
> I think the semantics are just fine. Consider this case:
>
> b = [] # maybe a result from some other method
> a.insert 23, *b
>
> I wouldn't want an exception thrown here. It would make it necessary to
> check for b's emptiness before every call to Array#insert. If people
> forget the check, it might cause an error when the impossible occurs
> anyway.

I think this is also true. I like errors thrown on everything I didn't expect.
I just hope this is a constant behavior and not changing from method to
method, so that I can expect it and relax without argument checking.