On Mon, Mar 29, 2010 at 12:39 PM, Walle Wallen <walle.sthlm / gmail.com> wrote:
> Brian Candler wrote:
>> Walle Wallen wrote:
>>> Doesn't work.
>>> (parameters[1]..parameters[-1]).inject {|result, element| result +
>>
>> That's creating a new Range object: ("faq".."rtorrent")
>>
>> What you want is an array slice:
>>
>>  ۱ݮ㮮>
> Thanks, it worked.
>
> I did a small test in IRB, and it seems like my method should work.
> Strange.
> a = ["a", "b", "c"]
> => ["a", "b", "c"]
>>> (a[1]..a[-1]).inject {|result, element| entry + result}
> => "bc"

As Brian has explained, (a[1]..[a-1]) creates a range. When you
iterate a range, it calls succ starting on the first element until it
reaches the last one. In your example with a, b, c:

irb(main):006:0> ("a".."c").each {|s| p s}
"a"
"b"
"c"

You get the three elements of the array, by chance. Try changing that
to something else, for example:

irb(main):013:0> array = ["a", "d", "f"]
=> ["a", "d", "f"]
irb(main):014:0> (array[1]..array[-1]).inject {|result, element|
result + element}
=> "def"

In your original example, the words were quite far apart:

irb(main):005:0> ("faq".."rtorrent").each_with_index {|s, i| p s;
break if i > 20}
"faq"
"far"
"fas"
"fat"
"fau"
"fav"
"faw"
"fax"
"fay"
"faz"
"fba"
"fbb"
"fbc"
"fbd"
"fbe"
"fbf"
"fbg"
"fbh"
"fbi"
"fbj"
"fbk"
"fbl"

and so on until "rtorrent".

Jesus.