我在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编程概念问题。
答案 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
中捕获对它的引用,然后再练习它。