Change the value of an attribute-object inside a method?

C

Carlos Caof2005

Folks:

This is a simple newbe question on how to change the value of an
attribute and I have tried to do it in several ways without success.
Here is the code:

###--- Main Class ---###
class Employee
attr_writer :name
attr_reader :name

def name
@name
end

def initialize(name)
puts "Creating object...."
@name=name
puts "Object created!"
end
end

def method_to_call( parameter1 )
objectEmployee = Employee.new( parameter1 )
puts " Name:=" + objectEmployee.name
puts
yield( objectEmployee.name )
puts
puts " Name:=" + objectEmployee.name
puts
end

method_to_call("Carlos") do |paramA|
paramA = paramA + " Aquiles"
puts " Trying to modify parameter!....!"
puts " => paramA := " + paramA
end
==================
The output is:

Creating object....
Object created!
Name:=Carlos

Trying to modify parameter!....!
=> paramA := Carlos Aquiles

Name:=Carlos
==================
So the question is how can I pass an attribute or Object to a method and
that inside it I can change the value of the attribute or Object, so
after leaving the method the attribute or object gets updated.

Any help will be very appreciated!
 
A

Alex Young

Carlos said:
Folks:

This is a simple newbe question on how to change the value of an
attribute and I have tried to do it in several ways without success.
Here is the code:

###--- Main Class ---###
class Employee
attr_writer :name
attr_reader :name

def name
@name
end

def initialize(name)
puts "Creating object...."
@name=name
puts "Object created!"
end
end

def method_to_call( parameter1 )
objectEmployee = Employee.new( parameter1 )
puts " Name:=" + objectEmployee.name
puts
yield( objectEmployee.name )
puts
puts " Name:=" + objectEmployee.name
puts
end

method_to_call("Carlos") do |paramA|
paramA = paramA + " Aquiles"
puts " Trying to modify parameter!....!"
puts " => paramA := " + paramA
end
==================
The output is:

Creating object....
Object created!
Name:=Carlos

Trying to modify parameter!....!
=> paramA := Carlos Aquiles

Name:=Carlos
==================
So the question is how can I pass an attribute or Object to a method and
that inside it I can change the value of the attribute or Object, so
after leaving the method the attribute or object gets updated.
You need to actually call a method on the object which changes it. What
you're doing when you say:

paramA = paramA + " Aquiles"

is actually this:

paramA = paramA.+(" Aquiles")

The convention is that the '+' method returns a new object that is the
result of the '+' operation, so this new object then replaces the
previous paramA when you do the assignment. What you actually want in
this case is:

paramA << " Aquiles"

The '<<' method actually alters the contents of the string rather than
allocating a new one.
 
N

Nando Sanchez

###--- Main Class ---###
class Employee
attr_accessor :name

def initialize(name)
puts "Creating object...."
@name=name
puts "Object created!"
end
end

def method_to_call( parameter1 )
objectEmployee = Employee.new( parameter1 )
puts " Name:=" + objectEmployee.name
puts
yield( objectEmployee.name )
puts
puts " Name:=" + objectEmployee.name
puts
end

method_to_call("Carlos") do |paramA|
paramA << " Aquiles"
puts " Trying to modify parameter!....!"
puts " => paramA := " + paramA
end
 

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
473,995
Messages
2,570,233
Members
46,820
Latest member
GilbertoA5

Latest Threads

Top