首先抱歉我的英语不好......我有点怀疑......我正在为实用的程序员阅读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的后代
我希望你能理解(抱歉我的英语不好)并且可以帮助我
非常感谢
答案 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.create
和window.create
似乎是非常不同的事情。如果要运行应用程序,则应首先创建它。简单地创建一个窗口是不够的。