I came across something unexpected today, and wondered if anyone could
explain it to me. If I have this class:
class Foo
def initialize @bar = 0
end
attr_accessor :bar
def add
bar += 1
end
end
then the "add" function doesn't work - it complains about a nil
object. You have to specifically put "self.bar += 1". Why is that - I
thought that the "self" was implicitly there?
Doing:
f = Foo.new
f.add
works as the class stands, so you only seem to need the self if you
are calling the accessor from within your class.
If you use just 'bar' it will think of a local variable which is not defined.
martin
···
On Saturday 03 March 2007 13:00, Roland Swingler wrote:
Hi,
I came across something unexpected today, and wondered if anyone could
explain it to me. If I have this class:
class Foo
def initialize @bar = 0
end
attr_accessor :bar
def add
bar += 1
end
end
then the "add" function doesn't work - it complains about a nil
object. You have to specifically put "self.bar += 1". Why is that - I
thought that the "self" was implicitly there?
Doing:
f = Foo.new
f.add
works as the class stands, so you only seem to need the self if you
are calling the accessor from within your class.
attr_accessor :bar refers to the instance variable @bar.
bar and @bar are not the same.
Harry
···
On 3/3/07, Roland Swingler <roland.swingler@gmail.com> wrote:
Hi,
I came across something unexpected today, and wondered if anyone could
explain it to me. If I have this class:
class Foo
def initialize @bar = 0
end
attr_accessor :bar
def add
bar += 1
end
end
then the "add" function doesn't work - it complains about a nil
object. You have to specifically put "self.bar += 1". Why is that - I
thought that the "self" was implicitly there?
Doing:
f = Foo.new
f.add
works as the class stands, so you only seem to need the self if you
are calling the accessor from within your class.
I came across something unexpected today, and wondered if anyone could
explain it to me. If I have this class:
class Foo
def initialize @bar = 0
end
attr_accessor :bar
def add
bar += 1
end
end
then the "add" function doesn't work - it complains about a nil
object. You have to specifically put "self.bar += 1". Why is that - I
thought that the "self" was implicitly there?
For methods that end in = (like bar=), you always need an explicit
receiver, even if it's self, because otherwise Ruby will see it as an
assignment to a local variable.
I came across something unexpected today, and wondered if anyone could
explain it to me. If I have this class:
class Foo
def initialize @bar = 0
end
attr_accessor :bar
def add
bar += 1
end
end
then the "add" function doesn't work - it complains about a nil
object. You have to specifically put "self.bar += 1". Why is that - I
thought that the "self" was implicitly there?