首先,我为我糟糕的英语感到抱歉……我有点疑问……我正在阅读实用programmer..and的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
这是一个非常基础的example...actually,它是第一个example..but,我是如此的新手,以至于我不理解它:
app是一个FXAPP对象..现在,我创建一个HelloWindow对象并传递名为“FXApp”的应用程序对象。
到目前一切尚好
但是在书中写app.create I'm调用FXApp class...or中的"create“方法不是吗?.
为什么当我调用app.create..ruby调用时,HelloWindow?..app内部的create方法是一个与HelloWindow类非常不同的对象,我可以调用anscestor方法(就像我使用SUPER...时一样),但不能以相反的方式调用。
为什么他们不这样叫呢?
helloobject=HelloWindow.new(app)
helloobject.create
通过这种方式,我调用了HelloWindows class..and中的create方法,它是FXMainWindows的后代
我希望你能理解(很抱歉我的英语不好),并能帮助我。
非常感谢
发布于 2011-08-14 05:14:02
我对FXRuby一无所知,但我会回答你们关于Ruby端的问题。
当Ruby执行app.create
时,它将在FXApp类中调用create
方法,因为app
的类型是FXApp (假设没有为singleton class of app定义create
方法)。
当您调用app.create
时,FXApp类中可能有一些代码在应用程序中的所有窗口上调用create
,因此这就是您的窗口的create
函数被调用的方式。如果您想真正了解窗口的create
函数是如何调用的,请尝试将raise "hello"
添加到该函数中,看看是否可以获得异常的回溯。
我真的不知道您最后一个问题的答案,因为它与FXRuby库的设计有关。但从概念上讲,调用app.create
和window.create
似乎是截然不同的两件事。如果你想运行应用程序,你应该先创建它。仅仅创建一个窗口是不够的。
https://stackoverflow.com/questions/7053064
复制相似问题