0

首先为我糟糕的英语感到抱歉...我有疑问..我正在为务实的程序员阅读 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 的后代

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

非常感谢

4

1 回答 1

2

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

Ruby 执行app.create时,会调用createFXApp 类内部的方法,因为它app的类型是 FXApp(假设没有为 app 的单例类create定义方法)。

当您调用 时app.create,FXApp 类中可能有一些代码可以调用create应用程序中的所有窗口,这就是create调用窗口函数的方式。如果你想真正了解你的窗口create函数是如何被调用的,试着添加raise "hello"它,看看你是否得到了异常的回溯。

我真的不知道你最后一个问题的答案,因为它与 FXRuby 库的设计有关。但从概念上讲,它看起来像是在召唤app.create,并且window.create是非常不同的东西。如果你想运行应用程序,你应该先创建它。仅仅创建一个窗口是不够的。

于 2011-08-13T21:14:01.977 回答