Matthew Moss
5/9/2008 12:27:00 AM
On May 8, 7:15 pm, globalrev <skanem...@yahoo.se> wrote:
> puts "Input sentence:"
> sentence = gets.split()
> puts
>
> temp = sentence
> phrase = sentence
> puts ":", temp, sentence, phrase
>
> phrase[0] = temp[1]
> puts "oink", phrase, temp
>
> when changing phrase[0] this will change temp as well and even
> sentence! makes no sense and very surprising. how do i do what i want
> to do?
>
> so basically ami messing with pointers here or what?
Essentially, yes, though I believe they are more commonly called
references (and not in that C++ sort of way).
When you do the assignment, phrase[0] = temp[1], you are simply making
the 0th item of the phrase array refer to the same object that the 1st
item of temp refers.
You need to throw in a `dup` call (duplicate) where appropriate. If
you want temp and phrase to be distinct from sentence, then change
those assignments to:
temp = sentence.dup
phrase = sentence.dup
If you wanted only phrase[0] to be distinct from temp[1], then:
phrase[0] = temp[1].dup