Ruby 在堆栈/流对象中存储信息
假设我有以下类型的应用程序:Ruby 在堆栈/流对象中存储信息,ruby,shoes,Ruby,Shoes,假设我有以下类型的应用程序: Shoes.app do @i = 0 def add_button button ("#{@i += 1}") end button("0") {add_button} end 因此,每次单击按钮时,它都会添加一个编号更高的新按钮。有没有办法对其进行编码,以便单击其中一个新按钮显示其编号?因为self总是指向应用程序,所以显而易见的方法是 button ("#{@i += 1}") {alert @i} 不起
Shoes.app do
@i = 0
def add_button
button ("#{@i += 1}")
end
button("0") {add_button}
end
因此,每次单击按钮时,它都会添加一个编号更高的新按钮。有没有办法对其进行编码,以便单击其中一个新按钮显示其编号?因为self
总是指向应用程序,所以显而易见的方法是
button ("#{@i += 1}") {alert @i}
不起作用,因为单击任何按钮只显示
@i
的当前值按钮
方法是否返回按钮实例?如果是这样,那么您可以在创建按钮时将整数作为实例变量分配给按钮。这可能会起作用,但尝试这样做的明显方式是为应用程序创建实例变量,而不是按钮。它起作用的原因是n
是一个局部变量,Ruby中的块是闭包。每次调用add_按钮
方法都会创建一个新的本地n
变量,但该变量在方法完成后不会消失,因为传递给按钮的块
在其上方关闭并保留其引用。
Shoes.app do
@i = 0
def add_button
n = @i+1
button ("#{@i += 1}") {alert n}
end
button("0") {add_button}
end