鞋子4,无法在主应用程序外部调用对象

问题描述 投票:2回答:3

我正在用Ruby开发一个非常简单的应用程序,并决定使用Shoes Gui,尝试使用新的第四版,但是我无法在应用程序外部调用shoe对象,例如,在Shoes手册http://shoesrb.com/manual/Rules.html中,此代码不起作用:

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

当我从应用程序传递堆栈对象时,什么都没有发生,谢谢您的帮助

ruby shoes
3个回答
0
投票

我认为您只是完全错过了阅读手册的机会。该手册非常清楚地表明,这显然应该可以工作,但是由于App对象不再存在,因此不可行。幸运的是,每个shoes对象都有一个app方法,因此:您应该将代码替换为:

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

希望有帮助:)


0
投票

我在这里描述了相同的问题,但是使用了手册中的正确代码。我已经找到了一些东西,所以我将其发布在这里,希望它能对某人有所帮助(或者有人会向我解释我not发现的东西)。

这是我刚学的(无论您将类实例放在何处,它都行不通。

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

现在,您也可以将类实例化移动到您的应用程序块中的任何位置...,但是它仍必须在您要附加到该框之前,并且必须在试图添加该按钮之前声明相同的框。添加到它。使事情变得有些棘手。否则,您可以在这里让您的类实例化。这意味着您每次尝试向框添加内容时都会创建一个新对象。而且很丑。但这有效。

编辑:刚刚看到,您可以在Messenger类中将@stack.append替换为self.append do。尽管它实际上并没有添加任何内容,但是由于它是在窗口的开头添加了味精。


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放置一次。

© www.soinside.com 2019 - 2024. All rights reserved.