постоянные переменные в синатре - PullRequest
2 голосов
/ 04 марта 2011

Предположим, у меня есть приложение 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 '/' является локальной переменной (не такой, как переменная вне блока), поэтому изменение ее значения не сохраняется.

(Я не совсем понимаю сферу Синатры.)

1 Ответ

3 голосов
/ 04 марта 2011

Вы можете сохранить «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

...