Robinson Risquez wrote in post #1062083:
> Certainly can be done in many ways, but what I want to do is spend just
> an attribute as a parameter to a method of the form: object.attribute,
> then you can modify this attribute in the method, as follows:
>
>  def adder (attribute)
>    attribute + = 1
>  end

No, you cannot do it that way.

First of all, Ruby doesn't have attributes in the sense of classical 
object oriented languages like Java or C++. When you write 
"object.attribute", you're actually calling a getter method: 
object.attributes(). It is *not* a variable, even though the missing 
parantheses make it look like it (which is intended).

Secondly: Even *if* Ruby had classical object attributes, your code 
wouldn't work. When you call a method and use a variable as an argument, 
then the *content* of the variable will be passed to the method, not the 
variable itself.

For example:

#---------------
def my_method(arg)
  p arg
end

my_var = 1
my_method(my_var)
#---------------

This will pass the Integer 1 to my_method. The variable itself is *not* 
passed, so you cannot reassign it in the method.

What you can do is to pass an object and the name of an attribute and 
then let the method call the correspoding setter method:

#---------------
class A
  attr_accessor :x
  def initialize
    @x = 0
  end
end

def addr(object, attribute_name)
  # call the getter method
  current_value = object.public_send(attribute_name)
  # call the setter method
  object.public_send("#{attribute_name}=", current_value + 1)
end

a = A.new()
puts a.x
addr(a, :x)
puts a.x
#---------------

However, I don't find this a very good programming style.

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