向Ruby类传递值

向Ruby类传递值,ruby,class,inheritance,user-interface,rubygems,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)

我正在用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
class Base
  attr_accessible :test

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

  def button1__clicked(*argv)
    Derived.new(@var, self).show
  end
end
类基
def初始化(x)
@var=x
@测试=0
结束
def按钮1已单击(*argv)
派生.new(@var.show)
结束
结束
类派生<基
def初始化(x)
超级(x)
结束
def show()
加载沼泽地(文件)
集合所有人
显示窗口()
结束
def按钮1已单击(*argv)
#做些测试
破坏窗口()
结束
结束
这里的想法是
Base
是一个窗口。当我单击
Base
窗口内的按钮时,会显示一个新的
派生的
窗口。我想做的是在
Derived
按钮1中更改@test,单击
函数,然后在
Derived
窗口被销毁后将该值返回到
Base


不知道这是一个更加可视化的ruby相关问题还是一个基本的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
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
中捕获对它的引用,然后进行练习。

由于某种原因,我在
initialize>中遇到了这个错误
:参数数目错误(2代表0)
。它无法识别派生的初始化函数。不知道为什么。你确定正在加载该类吗?它是用两个参数定义的,都是必需的,所以看到零意味着它可能是其他地方的一个不同实现。