关于ruby继承,FXRuby中的ruby对象的非常noob问题

时间:2011-08-13 20:27:08

标签: ruby inheritance 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

这是一个非常基本的例子......实际上这是他的第一个例子......但是我是诺贝克而不是我不理解它:

app是FXAPP对象.. 现在我创建一个HelloWindow对象并传递名为“app”的FXApp对象

到目前为止一切顺利

但现在......在书中写app.create 我在FXApp类中调用“create”方法......或者不是吗?..

为什么当我调用app.create..ruby调用HelloWindow中的create方法?.. app是一个非常不同的对象而不是HelloWindow类,我可以调用一个anscestor方法(比如我使用super)但不是反向...

为什么他们不称之为

helloobject=HelloWindow.new(app)
helloobject.create

这样我调用HelloWindows类中的create方法..它是FXMainWindows的后代

我希望你能理解(抱歉我的英语不好)并且可以帮助我

非常感谢

1 个答案:

答案 0 :(得分:1)

我对FXRuby一无所知,但我回答你关于Ruby方面的问题。

当Ruby执行app.create时,它将调用FXApp类中的create方法,因为app的类型是FXApp(假设没有定义create方法对于singleton class of app)。

当您致电app.create时,FXApp课程中可能会有一些代码在应用中的所有窗口上调用create,这就是您的窗口的create函数被调用的方式。如果您想真正了解如何调用窗口的create函数,请尝试向其中添加raise "hello",看看是否得到异常的回溯。

我真的不知道你上一个问题的答案,因为它与FXRuby库的设计有关。但从概念上讲,调用app.createwindow.create似乎是非常不同的事情。如果要运行应用程序,则应首先创建它。简单地创建一个窗口是不够的。