2011-08-13 15 views
0

先爲我的英文不好對不起......我有一個doubt..I'm閱讀FXRuby務實爲programmer..and我看到這個代碼關於Ruby繼承,內部FXRuby紅寶石對象非常noob問題

require 'fox16' 
include Fox 
class HelloWindow < FXMainWindow 
    def initialize(app) 
     super(app, "Hello, World!" , :width => 200, :height => 100) 
    end 

    def create 
     super 
     show(PLACEMENT_SCREEN) 
    end 

end 


app = FXApp.new 
HelloWindow.new(app) 
app.create 
app.run 

這是一個非常簡單的例子...其實它首先是他example..but我很小白不是我不明白:

應用程序是一個FXAPP對象.. 現在我創建了一個HelloWindow對象並傳遞我的名爲「app」的FXApp對象

迄今爲止這麼好

,但現在......在書中寫app.create 我打電話FXApp類裏面的「創造」的方法......還是不?..

爲什麼當我打電話app.create .. ruby調用HelloWindow內部的create方法?.. app是一個與HelloWindow類非常不同的對象,我可以調用anscestor方法(比如當我使用super時),但不能以相反的方式調用...

他們爲什麼不這就是這樣的

helloobject=HelloWindow.new(app) 
helloobject.create 

這樣我打電話給我創建裏面的ThOD HelloWindows class..and它是從FXMainWindows

我希望不是你能理解(對不起我的英文不好),可以幫助我

感謝這麼多

回答

1

我什麼都不知道後代關於FXRuby,但我回答了關於Ruby方面的問題。

當紅寶石執行app.create,它將調用FXApp類內的方法create因爲app的類型是FXApp(假設沒有爲singleton class of app定義沒有create方法)。

當你調用app.create,有可能是在FXApp類調用create上所有的應用程序窗口的一些代碼,所以這是你的窗口的create功能被怎麼叫。如果您想真正瞭解窗口的create函數的調用方式,請嘗試將raise "hello"添加到該函數中,並查看是否獲得異常的回溯。

我真的不知道最後一個問題的答案,因爲它與FXRuby庫的設計有關。但在概念上,它似乎要求app.createwindow.create是非常不同的事情。如果你想運行應用程序,你應該先創建它。簡單地創建一個窗口不夠好。