A bizarre problem with data= methods

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?

Thanl you for your help.

2009/8/27 David E. [email protected]

end
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.

On Thursday 27 August 2009, David E. wrote:

|
| end
|that normal?
|
|Thanl you for your help.
|

Because when ruby sees something like:

identifier = value

it thinks you’re creating a local variable called identifier, not
calling the
identifier= method. To force ruby to understand you want to call the
method,
you need to use the dot notation, self.identifier = value, or use send:
send(:identifier=, value).

I hope this helps

Stefano

El jueves 27 de agosto, James C. escribió:

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.

It has sense. Other form, Ruby might search all methods of class in each
local assignment.

Thank you.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs