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


#1

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!


#2

Carlos Caof2005 wrote:

method_to_call(“Carlos”) do |paramA|

                   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.


#3

###— 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