2013-05-06 180 views
2

我在visualruby做一个小应用程序和代码看起来是这样的:将值传递给Ruby类

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

不知道这是一个更visualruby相关的问题或基本的ruby编程概念问题。

回答

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对它的引用,后来行使。

+0

由于某种原因,我得到这个错误'初始化':错误数量的参数(2为0)'。它不认可'派生'的初始化函数。不知道为什么。 – Richard 2013-05-06 16:13:27

+0

您确定该课程正在加载吗?它被定义为两个参数,都是必需的,所以看到零意味着它可能是其他地方的不同实现。 – tadman 2013-05-06 16:34:51