class A
def a
puts 'in #a'
end
end
class B < A
def a
b()
end
def b
# here i want to call A#a.
end
end
Bef*_*ffa 80
class B < A
alias :super_a :a
def a
b()
end
def b
super_a()
end
end
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 30
没有很好的方法可以做到,但你可以这样做A.instance_method(:a).bind(self).call,这将有效,但是很难看.
您甚至可以在Object中定义自己的方法,以便像java中的super一样:
class SuperProxy
def initialize(obj)
@obj = obj
end
def method_missing(meth, *args, &blk)
@obj.class.superclass.instance_method(meth).bind(@obj).call(*args, &blk)
end
end
class Object
private
def sup
SuperProxy.new(self)
end
end
class A
def a
puts "In A#a"
end
end
class B<A
def a
end
def b
sup.a
end
end
B.new.b # Prints in A#a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20800 次 |
| 最近记录: |