очень нубский вопрос о наследовании ruby, объект ruby ​​внутри FXRuby - PullRequest
0 голосов
/ 14 августа 2011

сначала извините за мой плохой английский ... Я сомневаюсь ... Я читаю 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 "

пока все хорошо

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

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

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

helloobject=HelloWindow.new(app)
helloobject.create

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

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

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

1 Ответ

1 голос
/ 14 августа 2011

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

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

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

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

...