From: James Coglan Date: 2009-08-27T18:17:43+09:00 Subject: Re: A bizarre problem with data= methods --000e0ce026100190a004721c0ae3 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 2009/8/27 David Espada > Hi all. > > I have found an error that does not understand. Look this simple code: > > --------------------------------- > class Foo > def value=(data) > puts "Look #{data}" > end > end > > f = Foo.new.value = "at me" # => Look at me > --------------------------------- > > Great! A little assigner that works perfectly. But now I make a > constructor that use the assigner directly: > > --------------------------------- > class Foo > def initialize(data) > value = data > end > > def value=(data) > puts "Look #{data}" > end > end > > f = Foo.new("at me") # => Nothing!!!!!!!!! > --------------------------------- > > Why? The constructor doesn't use value= method. What is happening? Is > that normal? You need an explicit self, ie. `self.value = data`. Without the `self`, Ruby interprets that line as a local variable assignment, not a method call. -- James Coglan http://jcoglan.com --000e0ce026100190a004721c0ae3--