鞋4,不能在主应用程序外调用对象

时间:2014-06-23 14:55:07

标签: ruby shoes

我在Ruby中开发了一个非常简单的应用程序,并决定使用Shoes Gui,我试图使用新的第四个版本,但我不能在应用程序之外调用鞋子对象,例如在鞋子手册http://shoesrb.com/manual/Rules.html中此代码没有& #39; t work:

 class Messenger
   def initialize(stack)
     @stack = stack
   end
   def add(msg)
     @stack.append do
       para msg
     end
   end
 end

当我从应用程序传递堆栈对象时,没有任何反应,感谢您的帮助

3 个答案:

答案 0 :(得分:0)

我认为你完全错过了阅读手册。该手册非常清楚地表明,这显然应该可行,但它不会因为App对象不再存在。幸运的是,每个鞋子对象都有一个app方法,所以: 您应该用以下代码替换您的代码:

class Messenger
 def initialize(stack)
  @stack = stack
 end
 def add(msg)
  @stack.app do
   @stack.append do
     para msg
   end
  end
 end
end

希望有所帮助:)

答案 1 :(得分:0)

我遇到了与此处描述的相同的问题,但是使用了手册中的正确代码。我找到了一些东西,所以我在这里发帖,希望它可以帮助某人(或者有人会解释我 找不到的东西)。

这是我的第一次(无论你在哪里进行类实例化,它都无法工作)。

class Messenger
 def initialize(stack)
  @stack = stack
 end
 def add(msg)
  @stack.app do
    @stack.append do
        para msg
    end
  end
 end
end

 Shoes.app do
    stack margin: 20, width: 20 do
        subtitle "Shoes box"
        para "Maaamaaaaa"

        button "Mama ?" do
            s = Messenger.new(@box)
            s.add("Yeah, mama !")
        end
    end
    @box = stack
 end

首先:如果你在同一个文件中得到这两段代码,你可以这样做:

class Messenger
 ...
  @stack.app do
    @box.append do
        para msg
    end
  ...
end

有效。

如果删除@stack.app do块或者将此类移到另一个文件中,它不起作用。如果你把你的类实例化放在其他地方,它也不起作用。

更有趣的是,现在,即使你将Messenger课程放在其他地方也能工作,你可以这样做:

class Messenger
 ...
 def add(msg)
  @stack.app do
        para msg
  end
 ...


 Shoes.app do
    ...
        button "Mama ?" do
            @box.append do
                s = Messenger.new(@box)
                s.add("Yeah, mama !")
            end
        end
    ...
 end

现在你也可以在你的app块中的任何地方移动你的类实例...但它仍然必须在你试图追加的框之前,并且必须在按钮之前声明相同的框。正试图加入它。让事情变得有点棘手。否则,你可以让你的类在这里实例化。这意味着每次您尝试将某些东西附加到盒子上时,您都会创建一个新对象。这很难看。但它确实有效。

编辑:只是看到了,您可以在Messenger类中替换@stack.append来自self.append do。虽然它并没有真正附加任何东西,因为它在你窗口的开头添加了msg。

答案 2 :(得分:0)

首先,将class Messenger更改为class Messenger < Shoes。对于鞋类中的所有课程,这都是必不可少的。然后,将Shoes.app语句放在类的end语句之后,但不要添加do。您的代码应如下所示:

class Messenger < Shoes
    # Your code goes here...
end
Shoes.app [styling goes here]

注意:在定义所有类之后,仅将Shoes.app放在最后一次。