class Foo
def store(o)
o.dave=1
end
end
class SubFoo < Foo
def initialize
@dave=2
end
def store
super(self)
end
protected
attr_accessor :dave
end
sf = SubFoo.new
sf.store
p sf
The above code executes and shows that sf.dave has been set to 1. I
assumed it would not work because I thought Foo should not have access
to protected members which were defined in its subclasses. Is this a
bug? If not, can someone explain why this works? Thanks!
David W. wrote:
super(self)
to protected members which were defined in its subclasses. Is this a
bug? If not, can someone explain why this works? Thanks!
But youre calling store from the subclass.
T.
Trans wrote:
But youre calling store from the subclass.
I gather what you mean is that o.dave=1 is executed from the context of
a SubFoo and not from the context of a Foo. I guess thats how Ruby works
but it doesn’t seem intuitive to me because I’m not sure the equivalent
code would work in other languages I’m familiar with - namely Java and
C++.
David W. wrote:
Trans wrote:
But youre calling store from the subclass.
I gather what you mean is that o.dave=1 is executed from the context of
a SubFoo and not from the context of a Foo. I guess thats how Ruby works
but it doesn’t seem intuitive to me because I’m not sure the equivalent
code would work in other languages I’m familiar with - namely Java and
C++.
Thats right. I can say about th eother languages buit try this:
class Foo
def store(o)
p self # who am I?
o.dave=1
end
end
class SubFoo < Foo
def initialize
@dave=2
end
def store
super(self)
end
protected
attr_accessor :dave
end
sf = SubFoo.new
sf.store
p sf
T.
On 1/3/07, David W. [email protected] wrote:
Trans wrote:
But youre calling store from the subclass.
I gather what you mean is that o.dave=1 is executed from the context of
a SubFoo and not from the context of a Foo. I guess thats how Ruby works
but it doesn’t seem intuitive to me because I’m not sure the equivalent
code would work in other languages I’m familiar with - namely Java and
C++.
Ruby != Java && Ruby != C
Jacob F.