gpt4 book ai didi

ruby - 为什么我在调用 Shoes #'visit' 时会丢失我的实例变量?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:08 25 4
gpt4 key购买 nike

我确定这与鞋子 > 手册 > 规则中提到的复杂性有关,但我就是不明白。如果有人愿意在下面的代码中解释为什么 @var == nil ...我以为我可以使用访问在我的应用程序中的不同 View 之间切换,但如果我丢失所有状态,那将不起作用。

class MyShoe < Shoes
url '/', :index
url '/somewhere', :somewhere

def index
@var = para link( "go somewhere", :click => "/somewhere" )
end

def somewhere
para "var = #{@var.inspect}"
end
end

Shoes.app

最佳答案

_为什么他自己回答了这个问题,我会在一分钟内解决这个问题。首先,在不同的 url 之间传递数据(特别是字符串)的最简单方法是这样的:

class MyShoe < Shoes
url '/', :index
url '/somewhere/(\d+)', :somewhere

def index
@var = para link( "What is 2 + 2?", :click => "/somewhere/4" )
end

def somewhere(value)
para "2 + 2 = #{value}"
end
end

Shoes.app

它将匹配正则表达式的子组并将匹配的字符串作为参数传递给该方法。偶尔有用,但很快就会变得笨拙。另一种解决方案是使用常量或类变量,如 _why explains here :

OK, so fooling around further it looks like all instance variables get

wiped at the beginning of every method within a Shoes subclass.
That's OK I guess. So what's the preferred way to have some data
that's shared from one Shoes URL to another? Passing it from one page
to the next in the URL itself works -- if it's a string. If it's not
a string, what should you use -- @@class_variables?

当然可以使用类变量。那些 保证始终坚持 应用程序的生命周期。或者常数。

另外,Shoes自带SQLite3,数据 可以在那里传递。

在您的示例中,它看起来像这样:

class MyShoe < Shoes
url '/', :index
url '/somewhere', :somewhere

def index
@@var = para link( "go somewhere", :click => "/somewhere" )
end

def somewhere
para "var = #{@@var.inspect}"
end
end

Shoes.app

关于ruby - 为什么我在调用 Shoes #'visit' 时会丢失我的实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com