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

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!

--
Posted via http://www.ruby-forum.com/.

Carlos Caof2005 wrote:

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.

···

--
Alex

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

···

--
Posted via http://www.ruby-forum.com/.