2013-05-06 182 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