在Ruby中,我想acheive這樣的Java示例:從重寫的子類中分離Ruby方法? (如Java的私有方法)
class A {
private void f() { System.out.println("Hello world"); }
public void g() { f(); }
}
class B extends A {
public void f() { throw new RuntimeException("bad guy");}
}
public class Try {
public static void main(String[] args) { new B().g();}
}
這將在Java中打印的 「Hello world」,但直Ruby的成績單:
class A
def g; f; end
private
def f; puts "Hello world"; end
end
class B < A
def f; raise "bad guy"; end
end
B.new.g # want greet
當然會提高一個壞傢伙 - 由於方法查找機制的差別(我知道「私人」的意思是這些語言之間非常不同)
有沒有什麼辦法來達到類似的效果? 我並不關心可視性,實際上更喜歡這裏的所有公共方法。 我的目標是簡單地將超類中的方法從子類中重寫(這會破壞其他基方法)。
我想如果有解決方案,那麼也可以使用modules/includes?
module BaseAPI
def f; puts "Hello world"; end
def g; f; end;
end
module ExtAPI
include BaseAPI
# some magic here to isolate base method :f from the following one?
def f; raise "bad guy"; end # could actually be something useful, but interfering with base 'g'
end
include ExtAPI
g # want greet
後續:這看起來是在那裏的東西是可能的Java,但不使用Ruby極少數情況下: -/
莫非你是乾淨的第二個嗎? – SeanJA 2009-09-26 22:31:15
完成(僅用於記錄)。 – inger 2009-11-15 04:19:01