#1
You could also just calculate total whenever it's asked for:

class Thing
  attr_accessor :att1, :att2, :att3
  def total
    @att1 + @att2 + @att3
  end
end

#2
You could use the kvo gem: https://github.com/shawn42/kvo  It is generally
intended for external things to watch for attribute changes, but could be
used on itself.

The caveat being that you don't access the instance variables directly, but
must set them via their setter method.

class Thing
  include Kvo
  kvo_attr_accessor :att1, :att2, :att3
  def initialize
    self.when :attr1_changed { update_total  }
    self.when :attr2_changed { update_total  }
    self.when :attr3_changed { update_total  }
  end

  def update_total
    @total = att1 + att2 + att3
  end
end

If you are only calculating a quick sum, option #1 should suffice. If you
are actually doing some complicated thing that needs to only be calculated
once, #2 would work. Option #3 (not shown) would be to just write the
setter methods your self for att1=, att2= ... etc

Good luck
/Shawn

On Thu, Aug 30, 2012 at 9:38 PM, Damián M. González <[email protected]>wrote:

> Ey guys, how are you? I'm wondering if you can give me your advice.
> First the problem:
>
> .
> .
> attr_accessor :attribute1 :attribute2 :attribute3
> .
> .
> @attribute1 = 3
> @attribute2 = 5
> @attribute3 = 1
> @total = 9
> #this last attribute must be the result of the summation of @attribute1
> + #@attribute2 + @attribute3.
> .
> .
>
>  So what's the best way to reflect the explained in the comments inside
> the code. Will be very nice if i can assign the value of attribute1, 2
> or 3 with the attr_accessor facility. How can the value of @total be
> refreshed when one of attribute1, 2 or 3 has his value changed? I though
> in do(instead of the attr_accessor facility) one writer method for each
> of the 3 attribute, like this:
>
> def change_attribute1(new_value)
>  @total = @attribute2 + @attribute3 + new_value
>  @attribute1 = new_value
> end
> #and so on with the others attributes
>
>  but this seems sicken. Is there any way to link the values of the
> attributes with @total with the attr_accessor facility or other way...or
> I'm just limited to the last option. Thank's for your time. Damián.
>
> --
> Posted via http://www.ruby-forum.com/.
>

-- You received this message because you are subscribed to the Google Groups 
ruby-talk-google group. To post to this group, send email to 
[email protected]. To unsubscribe from this group, send email 
to [email protected]. For more options, visit this 
group at https://groups.google.com/d/forum/ruby-talk-google?hl=en

Reply via email to