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クラス内で「作成」メソッドを呼び出しています...それともそうではありませんか?..

app.create..ruby を呼び出すときに、HelloWindow 内で create メソッドを呼び出すのはなぜですか?..app は HelloWindow クラスとは非常に異なるオブジェクトであり、(スーパーを使用する場合のように) 祖先メソッドを呼び出すことはできますが、逆の方法ではできません。 ..

なぜ彼らはそれをこのように呼ばないのですか

helloobject=HelloWindow.new(app)
helloobject.create

このようにして、HelloWindows クラス内で create メソッドを呼び出します。これは FXMainWindows の子孫です。

あなたが理解できることを願っています(私の下手な英語で申し訳ありません)そして私を助けてくれることを願っています

本当にありがとう

4

1 に答える 1

2

FXRubyについては何も知りませんが、Rubyの側面についての質問に答えます。

Rubyを実行すると、のタイプがFXAppであるため、FXAppクラス内app.createのメソッドが呼び出されます(アプリのシングルトンクラスにメソッドが定義されていないことを前提としています)。createappcreate

を呼び出すとapp.create、FXAppクラスにcreateアプリ内のすべてのウィンドウを呼び出すコードが含まれている可能性があります。そのため、ウィンドウのcreate関数が呼び出されます。createウィンドウの関数がどのように呼び出されているかを実際に知りたい場合は、ウィンドウに追加raise "hello"して、例外のバックトレースが得られるかどうかを確認してください。

FXRubyライブラリの設計に関係しているので、最後の質問に対する答えはよくわかりません。しかし、概念的にはそれは呼び出しのように見え、app.create非常window.createに異なるものです。アプリを実行する場合は、最初にアプリを作成する必要があります。1つのウィンドウを作成するだけでは十分ではありません。

于 2011-08-13T21:14:01.977 に答える