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窗口。我想要做的是更改函数内部的@test Derived,然后在窗口被销毁后将该button1_clicked值返回给该值。BaseDerived

不知道这是一个更与visualruby相关的问题还是一个基本的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 回答