[~/rubytesting/TheRubyProgrammingLanguage/Chapter7ClassesAndModules/point]$ cat -n mutable_point.rb 1 #encoding : utf-8 2 class MutablePoint 3 def initialize(ñ,y) 4 @ñ, @y = ñ, y 5 end 6 7 def ñ; @ñ; end # The getter method for @ñ 8 def y; @y; end # The getter method for @y 9 10 def ñ=(value) # The setter method for @ñ 11 @ñ = value 12 end 13 14 def y=(value) # The setter method for @y 15 @y = value 16 end 17 18 def add!(p) # Add p to self, return modified self 19 @ñ += p.ñ 20 @y += p.y 21 self 22 end 23 # --------------------------- 24 def add(p) # A nonmutating version of add! 25 q = self.dup # Make a copy of self 26 q.add!(p) # Invoke the mutating method on the copy 27 end 28 29 end 30 31 if __FILE__ == $0 32 z = MutablePoint.new(1,2) 33 p z 34 t = MutablePoint.new(2,1) 35 p t 36 t.ñ = 4 37 p t 38 z.add!(t) 39 p z 40 end