在sinatra坚持变量

时间:2011-03-04 00:07:06

标签: scope sinatra

假设我有一个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的范围。)

1 个答案:

答案 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

了解更多信息:http://www.sinatrarb.com/configuration.html