[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Recursive array bug?

Siep Korteling

2/9/2008 10:36:00 PM

I've just reinvented the recursive array.

a = ["a rose is "]
a << a

Expecting the end of the world, or at least my ruby session, I did:

a.flatten!

But flatten! was just waiting for idiots like me and returned a polite
error. Investigating my unflattened array I found something strange.

p a[1][1][1][0]
=>a rose is

p a[0]
=> a rose is

p a[0][0]
=>97
Huh? I expected nil.

p a[0][0][0]
=>1
and it keeps returning 1's as far as I can see. Is this a bug or am I
just being silly?

Regards,

Siep
--
Posted via http://www.ruby-....

4 Answers

Justin Collins

2/9/2008 10:55:00 PM

0

Siep Korteling wrote:
> I've just reinvented the recursive array.
>
> a = ["a rose is "]
> a << a
>
> Expecting the end of the world, or at least my ruby session, I did:
>
> a.flatten!
>
> But flatten! was just waiting for idiots like me and returned a polite
> error. Investigating my unflattened array I found something strange.
>
> p a[1][1][1][0]
> =>a rose is
>
> p a[0]
> => a rose is
>
> p a[0][0]
> =>97
> Huh? I expected nil.
>
> p a[0][0][0]
> =>1
> and it keeps returning 1's as far as I can see. Is this a bug or am I
> just being silly?
>
> Regards,
>
> Siep
>


Does this help?

irb(main):001:0> a = [ "array" ]
=> ["array"]
irb(main):002:0> a << a
=> ["array", [...]]
irb(main):003:0> a[0] # This is Array#[]
=> "array"
irb(main):004:0> a[0][0] # This is String#[]
=> 97
irb(main):005:0> a[0][0][0] # This is Fixnum#[]
=> 1
irb(main):006:0> a[0][0][0][0][0] # This is also Fixnum#[]
=> 1

-Justin

Siep Korteling

2/10/2008 12:09:00 AM

0

Justin Collins wrote:
> Siep Korteling wrote:
>> error. Investigating my unflattened array I found something strange.
>>
>> p a[0][0][0]
>> =>1
>> and it keeps returning 1's as far as I can see. Is this a bug or am I
>> just being silly?
>>
>> Regards,
>>
>> Siep
>>
>
>
> Does this help?
>
> irb(main):001:0> a = [ "array" ]
> => ["array"]
> irb(main):002:0> a << a
> => ["array", [...]]
> irb(main):003:0> a[0] # This is Array#[]
> => "array"
> irb(main):004:0> a[0][0] # This is String#[]
> => 97
> irb(main):005:0> a[0][0][0] # This is Fixnum#[]
> => 1
> irb(main):006:0> a[0][0][0][0][0] # This is also Fixnum#[]
> => 1
>
> -Justin

Yes it does. I had to think real hard about it. With a[0][0] I expected
to get a value from a matrix (but there is no matrix, give me the blue
pill please), when I'm actually calling a method from a string. Why it
returns 97 is beyond me at this moment, but it's not relevant. Duck
typing fooled me, I guess.

Regards and thank you,

Siep

--
Posted via http://www.ruby-....

Christopher Dicely

2/10/2008 12:59:00 AM

0

On Feb 9, 2008 4:08 PM, Siep Korteling <s.korteling@gmail.com> wrote:
> Justin Collins wrote:
> > Siep Korteling wrote:
> >> error. Investigating my unflattened array I found something strange.
> >>
> >> p a[0][0][0]
> >> =>1
> >> and it keeps returning 1's as far as I can see. Is this a bug or am I
> >> just being silly?
> >>
> >> Regards,
> >>
> >> Siep
> >>
> >
> >
> > Does this help?
> >
> > irb(main):001:0> a = [ "array" ]
> > => ["array"]
> > irb(main):002:0> a << a
> > => ["array", [...]]
> > irb(main):003:0> a[0] # This is Array#[]
> > => "array"
> > irb(main):004:0> a[0][0] # This is String#[]
> > => 97
> > irb(main):005:0> a[0][0][0] # This is Fixnum#[]
> > => 1
> > irb(main):006:0> a[0][0][0][0][0] # This is also Fixnum#[]
> > => 1
> >
> > -Justin
>
> Yes it does. I had to think real hard about it. With a[0][0] I expected
> to get a value from a matrix (but there is no matrix, give me the blue
> pill please), when I'm actually calling a method from a string. Why it
> returns 97 is beyond me at this moment, but it's not relevant. Duck
> typing fooled me, I guess.
>

It gets 97 because "a rose is"[0] is 97; that is, 97 is the ASCII
character code of "a":

irb(main):006:0> text = "a rose is"
=> "a rose is"
irb(main):007:0> arr = (0..(text.length-1)).map {|idx| text[idx]}
=> [97, 32, 114, 111, 115, 101, 32, 105, 115]
irb(main):008:0> new_text = arr.inject("") {|str, code| str + code.chr}
=> "a rose is"

Robert Klemme

2/10/2008 1:06:00 AM

0

On 10.02.2008 01:08, Siep Korteling wrote:
> Yes it does. I had to think real hard about it. With a[0][0] I expected
> to get a value from a matrix (but there is no matrix, give me the blue
> pill please), when I'm actually calling a method from a string. Why it
> returns 97 is beyond me at this moment, but it's not relevant. Duck

irb(main):001:0> "a"[0]
=> 97
irb(main):002:0> 97.chr
=> "a"
irb(main):003:0> ?a
=> 97

Cheers

robert