Inheritance and super function

hello,
Say I have the following Ruby code.
Class A
def test
puts “I am A”
end
end

Class B < A
def test
puts “I am B”
end
end

Class C < B
def test
puts “I am C”
end
end

Now, in the function test in Class C, I want to call the test method
defined
in class A, by passing B’s test method.

How can I do this, just using plain ‘super’ doesn’t work? Is it possible
to do
this?

Either way, please help

Thanks in advance,


Surendra S.
http://ssinghi.kreeti.com, http://www.kreeti.com
Read my blog at: http://cuttingtheredtape.blogspot.com/
,----
| Great wits are sure to madness near allied,
| And thin partitions do their bounds divide.
|
| (John Dryden, Absalom and Achitophel, 1681)
`----

On 9/12/06, Surendra S. [email protected] wrote:

Now, in the function test in Class C, I want to call the test method defined
in class A, by passing B’s test method.

How can I do this, just using plain ‘super’ doesn’t work? Is it possible to do
this?

Use instance_method and bind.

module Kernel
def super_n(n=1)
self.class.ancestors[n].instance_method(caller.first[/`(.*)'/][1…-2]).bind(self).call
end
end

class C < B
def test
puts “I am C”
A.instance_method(:test).bind(self).call
self.class.superclass.superclass.instance_method(:test).bind(self).call
self.class.ancestors[2].instance_method(:test).bind(self).call
super_n(1)
super_n(2)
end
end

C.test.new

=>
I am C
I am A
I am A
I am A
I am B
I am A

“Sander L.” [email protected] writes:

def super_n(n=1)
self.class.ancestors[n].instance_method(caller.first[/`(.*)'/][1…-2]).bind(self).call
end
end

Super cool, thanks a lot.


Surendra S.
http://ssinghi.kreeti.com, http://www.kreeti.com
Read my blog at: http://cuttingtheredtape.blogspot.com/
,----
| “War is Peace! Freedom is Slavery! Ignorance is Strength!”
| – Orwell, 1984, 1948
`----