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
答えて
class B < A
alias :super_a :a
def a
b()
end
def b
super_a()
end
end
いい方法はありませんが、それはうまくいく、A.instance_method(:a).bind(self).call
を実行することができますが、醜いです。
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
@klochner、この解決策は、私が必要な正確に何...その理由だった:私は別の方法の総称的に呼び出し、スーパー方法を望んでいたが、私はできるようにしたかったひとつひとつの1を別名することなく、これを行うためには、superを呼び出す一般的な方法は非常に便利です –
一度定義するのは複雑で、多くの時間を簡単に呼び出すことは簡単です。それは逆です。 – nertzy
明示的にBの#bからの#aを呼び出す必要があるのではなく、必要がない場合:あなたもJavaでスーパーのように動作するオブジェクトで、独自のメソッドを定義することができ
B#aからA#aを呼び出すことができます。これは、B#bを使用して実際に行っていることです(例では、B#bから呼び出す理由を示すのに十分ではない場合を除き、 B#aからsuperを呼び出す、ちょうど時には初期化メソッドで行われるのと同じように。私はこれが一種のものであることを知っている、私はちょうどエイリアスする必要がないRuby new-comersを明確にしたかった。 「周りのエイリアス」) e。私は同意
class A
def a
# do stuff for A
end
end
class B < A
def a
# do some stuff specific to B
super
# or use super() if you don't want super to pass on any args that method a might have had
# super/super() can also be called first
# it should be noted that some design patterns call for avoiding this construct
# as it creates a tight coupling between the classes. If you control both
# classes, it's not as big a deal, but if the superclass is outside your control
# it could change, w/o you knowing. This is pretty much composition vs inheritance
end
end
- 1. スーパークラスのスーパークラスからメソッドを呼び出す
- 2. Clojure gen-classメソッドでスーパークラスのメソッドを呼び出す方法は?
- 3. ルビのすべてのメソッド呼び出しを監視する
- 4. サブクラスのメソッドをスーパークラスのオブジェクトから呼び出す方法は?
- 5. はサブクラスからスーパークラスのメソッドを呼び出す - JavaScriptの
- 6. C++スーパークラスを呼び出す
- 7. 別のクラスのメソッドを呼び出す
- 8. スーパークラスへのアクセスを持つサブクラスでの呼び出しメソッド
- 9. 別のクラスの別のメソッドを呼び出すメソッドのjunitテスト
- 10. 別のメソッドの中で別のメソッドを呼び出す?
- 11. スーパークラスのコンストラクタを呼び出す子クラス
- 12. スーパークラスのサブクラスメソッドを呼び出す
- 13. スーパークラスのawakeFromNibを呼び出す
- 14. 別のメソッドでオブジェクトを呼び出す
- 15. 別のクラスを呼び出すRepaint()メソッド
- 16. jxBrowser javaクラスがスーパークラスのメソッドを呼び出さない
- 17. スーパークラスの汎用メソッドからサブクラスの汎用メソッドを呼び出す
- 18. Objective Cサブクラスの初期化メソッドがスーパークラスのinitializeメソッドを呼び出す方法
- 19. オーバーライドされたメソッドを呼び出すと、オーバーライドされた呼び出しメソッドのスーパークラス
- 20. C#でメソッド/呼び出しを別のメソッドから呼び出す方法は?
- 21. 別のクラスから呼び出すメソッド
- 22. 別のクラスのメソッドを呼び出します。 ;別のクラスのメソッドを呼び出そうと#
- 23. サブクラスで呼び出されるスーパークラスの静的メソッド
- 24. サブクラスのスーパークラスの呼び出し関数
- 25. 別のクラスの呼び出しメソッドJAVA
- 26. 別のクラスの呼び出しメソッド
- 27. onCreateView()メソッドがスーパークラス呼び出しを要求しています
- 28. 別のメソッドを呼び出すES6クラスのメソッドのコールバック
- 29. 別のクラスのC#で別のメソッドを呼び出す方法
- 30. Typescript:クラス内の別のメソッドからメソッドを呼び出す
クラスメソッドのエイリアスについては、http://stackoverflow.com/questions/2925016/alias-method-and-class-methods-dont-mix –
を参照してください。 'alias'の名前が[' alias_method']に変更されている可能性はありますか?この回答が書かれて以来、(http://apidock.com/ruby/Module/alias_method) –
@ JaredBeck本当に名前が変更されました。だからそれは次のようになります:alias_method:super_a:a –