2011-03-04 95 views
2

假設持續變量我有一個末日的應用程序,只需從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 

我將如何做到這一點?使用上面的例子並不完全正常,因爲get '/'塊內的prev_rand是一個局部變量(與塊外的變量不同),所以更改其值不會持續。

(我不太明白西納特拉範圍。)

回答

3

你可以「prev_rand」存儲爲設置,這是一個應用程序級的變量,通過「設置」對象的請求範圍內進行訪問:

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