Очень нубский вопрос о наследовании ruby, объект ruby ​​внутри FXRuby

Сначала извините за мой плохой английский... я сомневаюсь.. я читаю FXRuby для прагматичного программиста.. и я видел этот код

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

Это очень простой пример... на самом деле это он первый пример... но я такой нуб, чем не понимаю

приложение является объектом FXAPP.. теперь я создаю объект HelloWindow и передаю свой объект FXApp с именем "приложение"

Все идет нормально

но сейчас... в книге напиши app.create я вызываю метод "create" внутри класса FXApp... или нет?..

почему, когда я вызываю app.create..ruby, вызываем метод create внутри HelloWindow?..app - это совершенно другой объект, чем класс HelloWindow, и я мог бы вызывать метод anscestor (например, когда я использую super), но не наоборот...

почему они не называют это как-то так

helloobject=HelloWindow.new(app)
helloobject.create

таким образом я вызываю метод create внутри класса HelloWindows.. и он происходит от FXMainWindows

Я надеюсь, что вы можете понять (извините за мой плохой английский) и можете мне помочь

Спасибо большое

1 ответ

Я ничего не знаю о FXRuby, но отвечаю на ваши вопросы о Ruby.

Когда Ruby выполняет app.create, это будет называть create Метод внутри класса FXApp, потому что appтип FXApp (при условии, что нет create метод, определенный для синглтон-класса приложения).

Когда вы звоните app.createесть, вероятно, какой-то код в классе FXApp для вызовов create на всех окнах в приложении, так вот как ваше окно create функция вызывается. Если вы действительно хотите узнать, как работает ваше окно create функция вызывается, попробуйте добавить raise "hello" к нему и посмотреть, если вы получите обратный след исключения.

Я действительно не знаю ответа на ваш последний вопрос, потому что он связан с дизайном библиотеки FXRuby. Но концептуально это похоже на вызов app.create а также window.create это очень разные вещи. Если вы хотите запустить приложение, вы должны сначала создать его. Простого создания одного окна недостаточно.

Другие вопросы по тегам