Principle of le,err i mean biggest surprise!?

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?

On May 8, 7:15 pm, globalrev [email protected] wrote:

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

On Thu, May 8, 2008 at 8:15 PM, globalrev [email protected] wrote:

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?

http://talklikeaduck.denhaven2.com/articles/2006/09/13/on-variables-values-and-objects

Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

globalrev wrote:

when changing phrase[0] this will change temp as well and even
sentence! makes no sense and very surprising.
Well actually it makes perfect sense… given what a Ruby variable
actually is. See below.

how do i do what i want

to do?

so basically ami messing with pointers here or what?

Yes you are. Variables in ruby are references to their underlying
objects. Assignment assigns the references. Use the dup method to
create copies.

Ron.

how do i do what i want to do?

I believe you might want to use .dup