2017-02-16 7 views
-1

У меня есть класс с array = [element1, element2, element3]. Я устанавливаю для element1 = 1s, element2 = 5s, element3 = 7s в то же время. Это означает, что через 1 секунду массив изменится на [element2, element3] Спустя 5 секунд [element3], через 7 с будет пустой массив. Как мы можем это сделать? Это похоже на пути, которые мы установили для Redis expire key 30, ttl key.Истекает переменные после определенного времени в рубине

+3

Да, мы делаем. Это включает в себя запись кода для проверки, чтобы узнать, сколько времени истекло, а затем назначить им «nil». Я никогда не видел причины делать то, о чем вы говорите, в коде. Вместо этого я отказываюсь делать то, что требует использования этих переменных, если время истекло. –

+0

Я только что редактировал вопрос для получения более подробной информации. –

ответ

0

В рубине нет встроенных функций, и для его реализации можно использовать различные структуры данных, в зависимости от ситуации.

Вот простейший пример:

class Ephemarray 
    def initialize 
    @array = [] 
    end 

    def [] index 
    return nil if @array[index].nil? 
    return @array[index] = nil if (Time.now - @array[index][2] > @array[index][1]) 
    return @array[index][0] 
    end 

    def []= index, expiry, value 
    @array[index] = [value, expiry, Time.now] 
    end 

end 

e = Ephemarray.new 
e[0, 4] = 'blah' 

Конечно, вы всегда можете решить эту проблему с помощью gem install redis с;