【问题标题】:Passing values to Ruby Classes将值传递给 Ruby 类
【发布时间】:2013-05-06 10:21:59
【问题描述】:

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

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

【问题讨论】:

    标签: ruby class inheritance user-interface rubygems


    【解决方案1】:

    您不是将值传递给类,而是将值传递给类的实例,它只是一个对象。

    您需要做的是在一个和另一个之间建立一个链接,以便可以将消息从 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 中捕获对它的引用,然后进行练习。

    【讨论】:

    • 由于某种原因,我收到此错误in initialize': wrong number of arguments(2 for 0). It's not recognizing Derived 的初始化函数。不知道为什么。
    • 您确定正在加载该类吗?它是用两个参数定义的,都是必需的,所以看到零意味着它可能是其他地方的不同实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多