将值传递给Ruby类

时间:2013-05-06 10:22:00

标签: ruby class inheritance user-interface rubygems

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

不知道这是一个更与视觉相关的问题还是一个基本的ruby编程概念问题。

1 个答案:

答案 0 :(得分: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中捕获对它的引用,然后再练习它。