1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
=begin
Shows that super is not bound to the the current lexical method scope.
=end
def y &p; yield; p; end
class C
def f *a
puts "C.f #{a.inspect}"
end
def e *a
puts "C.e #{a.inspect}"
end
end
class E
def g *a
puts "E.g #{a.inspect}"
end
end
class A
def h *a
puts "A.h #{a.inspect}"
end
end
class F < E
def g *a
puts "F.g #{a.inspect}"
1.times {
super
$p = y {
1.times {
super
y &$q
}
}
}
y &$p
end
end
class B < A
def h *a
puts "B.h #{a.inspect}"
$q = y {
super
}
end
end
B.new.h 1
puts '--'
F.new.g 2
puts '--'
class D < C
define_method :f, &$p
def e *a
puts "D.e #{a.inspect}"
y &$p
end
end
D.new.f(3)
puts '--'
D.new.e(4)
|