Principle of le,err i mean biggest surprise!!??

G

globalrev

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?
 
M

Matthew Moss

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
 
R

Rick DeNatale

R

Ron Fox

globalrev said:
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.
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,204
Messages
2,571,065
Members
47,672
Latest member
svaraho

Latest Threads

Top