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. Clojure gen-classメソッドでスーパークラスのメソッドを呼び出す方法は?
- 2. サブクラスのメソッドをスーパークラスのオブジェクトから呼び出す方法は?
- 3. はサブクラスからスーパークラスのメソッドを呼び出す - JavaScriptの
- 4. 別のクラスのメソッドを呼び出す
- 5. C++スーパークラスを呼び出す
- 6. スーパークラスへのアクセスを持つサブクラスでの呼び出しメソッド
- 7. 別のクラスを呼び出すRepaint()メソッド
- 8. 別のメソッドでオブジェクトを呼び出す
- 9. スーパークラスのサブクラスメソッドを呼び出す
- 10. オーバーライドされたメソッドを呼び出すと、オーバーライドされた呼び出しメソッドのスーパークラス
- 11. Objective Cサブクラスの初期化メソッドがスーパークラスのinitializeメソッドを呼び出す方法
- 12. スーパークラスの汎用メソッドからサブクラスの汎用メソッドを呼び出す
- 13. 別のクラスから呼び出すメソッド
- 14. サブクラスのスーパークラスの呼び出し関数
- 15. EJB後で別のEJBを呼び出すメソッドを呼び出す - >リターンヌル
- 16. スーパークラスからサブクラスメソッドを呼び出す
- 17. JavaScriptで「スーパークラス」コンストラクタを呼び出す
- 18. スカラの自己型付き形質でスーパークラスのメソッドを呼び出す
- 19. メソッドC#で別のメソッドを呼び出す方法は?
- 20. ObjectiveCではスーパークラスのメソッドを呼び出すタイミングが重要ですか?
- 21. 別の.javaファイル内の他のクラスのメソッドを呼び出す
- 22. 別のメソッドからのJavaスクリプト呼び出しメソッド
- 23. スーパークラスを拡張し、スーパークラスのコンストラクタパラメータでメソッドまたは遅延値を呼び出す方法
- 24. JavaScriptで別の内1つのプロトタイプのメソッドを呼び出す
- 25. mvcの別のコントローラからコントローラのメソッドを呼び出す
- 26. 別のクラスのメソッドを呼び出すときのヌルポインタ
- 27. パラメータを持つ別のクラスのメソッドを呼び出す
- 28. DialogFragmentを別のフラグメント内のメソッドを呼び出す方法
- 29. Ajaxリクエスト - Springのコントローラで別のメソッドを呼び出す
- 30. Javaの別のクラスからメソッドを呼び出す方法
クラスメソッドのエイリアスについては、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 –