假设我有一个Sinatra应用程序,它只是打印出0-9的随机数:
get '/' do
rand(10)
end
我想确保该应用程序不会打印出与上次相同的数字(因此它不是随机的 - 这只是一个玩具示例,无论如何):
# I want to do something like this... This code doesn't work.
prev_rand = nil
get '/' do
curr_rand = rand(10)
while prev_rand and curr_rand == prev_rand
curr_rand = rand(10)
end
prev_rand = curr_rand
curr_rand
end
我该怎么做?使用上面的示例并不是很有效,因为prev_rand
块中的get '/'
是局部变量(与块外的变量不同),因此更改其值不会持久。
(我不太了解Sinatra的范围。)
答案 0 :(得分:3)
您可以将“prev_rand”存储为设置,这是一个应用程序级变量,可以通过“settings”对象在请求上下文中访问:
configure do
set :prev_rand, nil
end
get '/' do
begin
curr_rand = rand(10)
end while curr_rand == settings.prev_rand
set :prev_rand, curr_rand
curr_rand
end