2

私はvisualrubyで小さなアプリケーションを作成しています.コードは次のようになります:

class Base
    def initialize(x)
        @var = x
        @test = 0
    end

    def button1__clicked(*argv)
        Derived.new(@var).show
    end
end

class Derived < Base
    def initialize(x)
        super(x)
    end

    def show()      
        load_glade(__FILE__)
        set_glade_all()
        show_window() 
    end

def button1__clicked(*argv)
    #do something to test
    destory_window()
end

end

ここでのアイデアは、それBaseが窓だということです。ウィンドウ内のボタンをクリックするとBase、新しいDerivedウィンドウが表示されます。私がやりたいのは、 @testDerivedの関数内で変更し、ウィンドウが破棄された後にbutton1_clickedその値を元に戻すことです。BaseDerived

これがより視覚的なRuby関連の質問なのか、それとも基本的なRubyプログラミングの概念に関する質問なのかはわかりません.

4

1 に答える 1

2

クラスに値を渡すのではなく、単なるオブジェクトであるクラスのインスタンスに値を渡します。

必要なことは、Derived から Base にメッセージを送り返すことができるように、一方と他方の間にリンクを作成することです。

おそらく次のようになります。

class Base
  attr_accessible :test

  def initialize(x)
    @var = x
    @test = 0
  end

  def button1__clicked(*argv)
    Derived.new(@var, self).show
  end
end

Baseこれにより、問題のインスタンスへの参照が渡され、他のtestユーザーが属性を編集できるようになります。

これは、次のように使用できます。

class Derived < Base
  def initialize(x, base)
    @base = base
    super(x)
  end

  def button1__clicked(*argv)
    @base.test = 1 # or whatever new value is required
    destory_window()
  end
end

それへの参照をキャプチャし@base、後でそれを実行します。

于 2013-05-06T11:13:13.837 に答える